Java 三大特征

74 阅读3分钟

Java 三大特征

封装、继承、多态。

封装

尽可能隐藏对象的实现细节,控制对象的修改及其访问权限。

访问修饰符:private(设置属性为私有,仅本类可见)。

set/get 方法是外界访问私有属性的唯一通道,方法内部对数据进行检验过滤。

提供公开方法,可以确保数据的正确赋值。

说明:其实封装在生活中非常常见,就好比你想让别人看到的东西,就暴露出来;而你不想让别人看到的就隐藏起来。

继承

程序中的继承,是类与类之间特征和行为的一种赠与和获得。

两个类的继承关系,必须满足"is a"关系。

在继承中,父类的选择和抽取非常重要。

那如何选择父类呢? 父类功能越精细,子类和父类重合点越多,就越接近父类。

那如何抽取父类呢? 根据程序需要使用到的多个具体类,将其共性(特征和行为)进行抽取,进而定义父类,实现重用。

产生继承关系之后,子类中可以使用父类中的属性和方法,也可以定义子类独有的属性和方法。

好处:提高了代码复用性和可拓展性。

Java 为单继承,一个类只有一个直接父类,但可以多级继承,属性和方法叠加。

那么什么不可以继承呢?

  • 构造方法

    • 类中的构造方法,只负责创建本类对象,不可继承。
  • private 修饰的属性和方法

  • 父子类不在同一个包内,default 修饰的属性和方法

访问修饰符

本类同包非同包子类其他
private×××
缺省××
protected×
public

方法重写

为什么要方法重写?

当父类提供的方法无法满足子类需求时,可在子类中和父类相同的方法进行重写(Override)。

方法重写的要求

  • 方法名、参数列表、返回值类型必须与父类相同。
  • 访问修饰符可与父类相同或比父类更宽泛。

执行顺序

子类重写父类方法后,调用时优先执行子类重写后的方法。

super 关键字

使用方法:

  1. 在子类中使用super.形式访问父类的属性和方法。
  2. 在子类构造方法首行,使用super()super(实参),调用父类构造方法。
  3. 如果子类构造方法中没有显示定义super()super(实参),默认提供super()
  4. 同一构造方法中,this()super()不可同时出现。

继承关系下的对象创建

在具有继承关系的对象创建中,构建子类对象会先构建父类对象。

继承关系对象创建流程

构建父类对象 -> 初始化自身属性 -> 执行自身构造方法中的逻辑代码

多态

父类引用指向子类对象,从而提供产生多态的前提条件。

多态的前提

  1. 类与类之间要存在直接或间接的继承关系
  2. 父类引用指向子类对象。

父类仅可调用父类声明所声明的属性和方法,不可调用子类独有的属性和方法。

场景

  1. 使用父类作为方法形参实现多态,实际传递子类对象,使方法参数的类型更为宽泛。
  2. 使用父类作为方法返回值实现多态,实际范围子类对象,使方法可以返回不同子类对象。

作用

  1. 屏蔽子类之间的差异。
  2. 灵活、耦合度低。