Java 基础入门 | 第八章 继承、封装、多态

简介: 封装封装的概念把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类或者对象进行操作,对不可信的类或者对象隐藏,这样的过程叫做封装。封装的分类对属性的封装将属性设置为private(私有),限制其只能

封装

封装的概念

把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类或者对象进行操作,对不可信的类或者对象隐藏,这样的过程叫做封装。

封装的分类

对属性的封装

将属性设置为private(私有),限制其只能在类的内部使用

对方法的封装

对于方法的封装,将外部可以访问方法设置为public,将外部不能访问的方法设置为private

代码示例

//将属性和方法进行封装
public class Encapsulation {
    //成员变量设置为私有,达到属性封装的目的
    private String name;
    //为私有属性获取提供getter方法,用于获取属性值
    public String getName() {
        return name;
    }
    //为私有属性获取提供setter方法,用于给属性赋值
    public void setName(String name) {
        this.name = name;
    }
    //将成员方法设置为私有,达到封装的目的
    private void eat(){
        System.out.println("我是一名程序员,哈哈!!!");
    }
}

image.gif

继承

什么是继承

一个新类可以从现有的类派生,这样的过程叫做继承。

那么在继承的过程中,新类被称为子类,现有的类被称为父类,子类将会继承父类的属性和行为。

image.gif编辑 继承的语法

[修饰符] class 子类类名 extends 父类类名 {类体部分}

 

代码示例

创建一个动物类(Animal)

public class Animal {
    private int age;
    private String sex;
    private void eat(){
        System.out.println("吃饭!!!");
    }
    private void sleep(){
        System.out.println("睡觉!!!");
    }
}

image.gif

创建一个狗类(Dog),继承动物类(Animal)的属性和方法

public class Dog extends Animal{
    public static void main(String[] args) {
        Dog dog=new Dog();
        dog.setAge(3);
        dog.setSex("公");
        System.out.println("狗狗今年"+dog.getAge()+"岁");
        System.out.println("狗狗性别是"+dog.getSex()+"狗");
        dog.eat();
        dog.sleep();
    }
}

image.gif

Dog类继承了Animal类,Dog类可以称为AniMal的子类,Animal类可以成为Dog里的父类。

子类的扩展

子类除了可以拥有父类非私有的属性和方法外,也可以扩展自己的属性和方法

代码示例

public class Dog extends Animal{
    private String name;
    public void  shout(){
        System.out.println("汪汪汪汪!!!");
    }
    public static void main(String[] args) {
        Dog dog=new Dog();
        //private修饰变量和方法的可以直接在内部调用
        dog.name="旺财";
        System.out.println(dog.name);
        dog.shout();
    }
}

image.gif

    • Java中的继承是单继承,也就是一个类只能有一个父类。
    • 如果一个类没有显式的继承某一个类,那么它有一个默认的父类是java.lang.Object类
    • Java继承了父类非私有的成员变量和成语方法,但是请注意:子类是无法继承父类的构造方法的

    方法的重写

    重写 override   overload

    子类从父类继承的某个实例方法无法满足子类的功能需要时,需要在子类中对该实例方法进行重新实现,这样的过程称为重写,也叫做覆写。

    方法重写的要求

    子类重写方法的访问修饰范围必须大于或者等于父类对应方法的访问修饰符范围

    除修饰符外,重写方法的其他部分必须和父类保持一致

    super关键字

    super代表的是父类对象

    super的使用方式

    super.属性名 用于在子类中调用父类被隐藏的同名实例变量

    代码示例

    public class SuperClass {
        int num=20;
        //static 修饰内部类 可以被外部访问
        static class SubClass extends SuperClass{
            int num=30;
            public void  speak(){
                System.out.println(super.num);
                System.out.println(num);
            }
        }
        public static void main(String[] args) {
            SubClass subClass=new SubClass();
            subClass.speak();
        }
    }

    image.gif

    super([参数列表]) 用于在子类的构造方法中调用父类的构造方法

    代码示例

    public class SuperClass {
        public SuperClass(){
            System.out.println("父SuperClass的无参构造器");
        }
        public void  speak(){
            System.out.println("我是父类!!!");
        }
        //static 修饰内部类 可以被外部访问
        static class SubClass extends SuperClass{
            int num=30;
            public SubClass(){
                super(); //可以不写,默认就有
                System.out.println("子SubClass的无参构造器");
            }
            public void  speak(){
                super.speak();
                System.out.println("我是子类!!!");
            }
        }
        public static void main(String[] args) {
            SubClass subClass=new SubClass();
            subClass.speak();
        }
    }

    image.gif

      • 每一个子类的构造方法在没有显示调用super()系统都会提供一个默认的super()
      • super() 书写在第一行
      • 可以在子类构造方法中显示调用super(),完成对特定父类构造方法的调用

      多态

      什么是多态

      多态顾名思义即为多种形态的意思

      Java中多态的含义

      发送消息给某个对象,让这个对象自行决定采用哪种行为响应这个消息

      子类对象的引用赋值给父类引用变量来实现动态的方法调用

      Java中形成多态的前提

        • 继承
        • 重写
        • 向上转型

        代码示例

        动物类

        public class Animal {
            public void eat(){
                System.out.println("吃饭!!!");
            }
        }

        image.gif

        狗类

        public class Dog extends Animal{
            //重写父类方法
            public void  eat(){
                System.out.println("吃骨头!!!");
            }
        }

        image.gif

        猫类

        public class Cat extends Animal{
            //重写父类方法
            public void  eat(){
                System.out.println("吃鱼!!!");
            }
        }

        image.gif

        多态测试类

        public class MixinsTest {
            //多态(多种声明对象形式)
            public static void main(String[] args) {
                Animal dog=new Dog();
                Animal cat=new Cat();
                dog.eat();
                cat.eat();
            }
        }

        image.gif

        输出结果

        image.gif编辑

        多态的作用

          • 提高代码的可重用性
          • 降低模块之间的耦合度
          相关文章
          |
          2月前
          |
          存储 Oracle Java
          java零基础学习者入门课程
          本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
          304 0
          |
          3月前
          |
          Java
          java入门代码示例
          本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
          416 0
          |
          3月前
          |
          Java API 数据库
          2025 年最新 Java 实操学习路线,从入门到高级应用详细指南
          2025年Java最新实操学习路线,涵盖从环境搭建到微服务、容器化部署的全流程实战内容,助你掌握Java 21核心特性、Spring Boot 3.2开发、云原生与微服务架构,提升企业级项目开发能力,适合从入门到高级应用的学习需求。
          682 0
          |
          3月前
          |
          前端开发 Java 数据库连接
          帮助新手快速上手的 JAVA 学习路线最详细版涵盖从入门到进阶的 JAVA 学习路线
          本Java学习路线涵盖从基础语法、面向对象、异常处理到高级框架、微服务、JVM调优等内容,适合新手入门到进阶,助力掌握企业级开发技能,快速成为合格Java开发者。
          545 3
          |
          3月前
          |
          监控 Java API
          2025 年全新出炉的 Java 学习路线:从入门起步到实操精通的详细指南
          2025年Java学习路线与实操指南,涵盖Java 21核心特性、虚拟线程、Spring Boot 3、微服务、Spring Security、容器化部署等前沿技术,助你从入门到企业级开发进阶。
          786 0
          |
          4月前
          |
          NoSQL Java 关系型数据库
          Java 从入门到进阶完整学习路线图规划与实战开发最佳实践指南
          本文为Java开发者提供从入门到进阶的完整学习路线图,涵盖基础语法、面向对象、数据结构与算法、并发编程、JVM调优、主流框架(如Spring Boot)、数据库操作(MySQL、Redis)、微服务架构及云原生开发等内容,并结合实战案例与最佳实践,助力高效掌握Java核心技术。
          411 1
          |
          4月前
          |
          Java 测试技术 API
          Java IO流(二):文件操作与NIO入门
          本文详解Java NIO与传统IO的区别与优势,涵盖Path、Files类、Channel、Buffer、Selector等核心概念,深入讲解文件操作、目录遍历、NIO实战及性能优化技巧,适合处理大文件与高并发场景,助力高效IO编程与面试准备。
          |
          4月前
          |
          Java 编译器 API
          Java Lambda表达式与函数式编程入门
          Lambda表达式是Java 8引入的重要特性,简化了函数式编程的实现方式。它通过简洁的语法替代传统的匿名内部类,使代码更清晰、易读。本文深入讲解Lambda表达式的基本语法、函数式接口、方法引用等核心概念,并结合集合操作、线程处理、事件回调等实战案例,帮助开发者掌握现代Java编程技巧。同时,还解析了面试中高频出现的相关问题,助你深入理解其原理与应用场景。