JavaSE基础篇(九)——面向对象(中)

面向对象的三大特性

1. 封装

  • 封装可以隐藏对象的属性和其方法的实现细节,仅对外公开接口,控制其访问级别。

  • 封装的目的:增强安全性和简化编程。

  • 封装性在代码中的体现就是公有方法调用私有属性成员

    //类
    public class Student {
        //属性
        private int stuId;      //学号
    	//获得学号
        public int getStuId() {
            return stuId;
        }
    	//给学号赋值
        public void setStuId(int stuId) {
            this.stuId = stuId;
        }
        //动作(方法)
        public static void study(){ //学习
            System.out.println("I am studying !");
        }
    }
    
    • 由于 stuIdStudent 类的私有属性,其他类不能使用 对象.属性名 的方法调用 stuId ,但可以使用对象名.getStuId() 获得 stuId

    • 对于 setStuId 方法,可以在其中添加属性安全性检查,增强程序的安全性,比如下面的代码:

      public void setStuId(int stuId) {
          if(stuId < 0){
              return error;
          }
          this.stuId = stuId;
      }
      
  • 封装的优点

    • 提高系统安全性,保护数据。
    • 隐藏代码实现细节。
    • 统一接口。
    • 增加系统的可维护性。

2. 继承

  • 继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。

  • 继承的本质就是 “扩展”,使用 extends 关键字来实现。

  • 继承是两个类之间的一种关系,一个为父类(基类),一个为子类(派生类)。

  • 区别于实例化对象

    • 学生分为小学生和中学生,其中学生是父类,小学生和初中生是子类。
    • 张三是小学生,李四是中学生,张三和李四分别为小学生和中学生的对象。
  • 继承的特点:

    • 子类可以继承父类的所有非私有的属性和方法。

    • Java 中的所有类都直接或者间接继承 Object 类,通俗点讲就是,Object 类是 Java 中所有类的祖宗。

    • Java 中只有单继承,没有多继承(一个子类只能有一个直接父类,一个父类可以有多个子类)。

    • 创建子类对象会执行父类和子类的构造器,且父类构造器必须先于子类构造器执行。

    • 子类继承父类的属性或者方法,访问权限只能不变或者扩大,不能缩小。如:父类的 protected 属性,子类继承后只能是 protectedpublic ,不能是 defaultprivate

      public > protected > default > private

  • super 关键字

    • super 指代当前类的父类的对象的引用,可使用 super.方法名() 调用父类的方法(非私有),使用 super.属性名 调用父类的属性(非私有)。
  • super 调用父类的构造方法,必须在构造方法的第一个。

  • superthis 对比

    参数 this super
    作用域 子类、父类的方法都可以 只能出现在子类的方法中
    指代对象 当前类的对象 当前类的父类的对象
    前提 有无继承皆可使用 只能在继承条件下使用
    构造方法 this() 当前类的构造 super() 当前类的父类的构造
    兼容性 this 和 super 不能同时调用构造方法 this 和 super 不能同时调用构造方法
  • 方法重写

    • 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写![1]

    • 重写与重载的区别

      参数 重写 重载
      作用域 只能在子类重写父类(前提是继承关系) 同一类或者子类
      参数列表 相同 不同
      访问权限 不能比父类低 可以随意更改
      构造方法 不能被重写 可以重载
      限制 不能重写 private、final、static 修饰的方法 无限制
      抛出异常 可以被缩小,不能被扩大 可以声明新的或更广的检查异常

3. 多态

  • 多态为不同数据类型的实体提供统一的接口,使同一个事件发生在不同的对象上会产生不同的结果

  • 多态指方法的多态,属性没有多态。

  • 多态存在的三个必要条件:

    • 继承
    • 重写
    • 父类引用指向子类对象:Parent p = new Child();
  • 多态方法调用:

    • 首先检查父类中是否有该方法,如果没有,则编译错误。
    • 如果有,而且子类并未重写该方法,调用父类方法。
    • 如果有,而且子类重写了该方法,再去调用子类的同名方法。
  • 多态的优点

    • 消除类型之间的耦合关系
    • 可替换性
    • 可扩充性
    • 接口性
    • 灵活性
    • 简化性
  • 详情及代码演示[2]

4. 参考资料

[1] 佚名. Java 重写(Override)与重载(Overload)[EO/BL]. https://www.runoob.com/java/java-override-overload.html, ???-??-??/2021-03-21.
[2] 佚名. Java 多态[EB/OL]. https://www.runoob.com/java/java-polymorphism.html, ???-??-??/2021-03-21.

上一篇:关于Flutter文本组件Widget的全面解读,已整理成文档


下一篇:QBasicTimer学习笔记