尚硅谷 java 学习 b 站大学版 Day16 继承与多态

五、面向对象特征 二:继承性(inheritance)


一、继承性的优势:

1、减少代码冗余,提高代码的复用型

2、便于功能的拓展

3、为之后的多态性的使用提高了前提

二、继承性的格式: class A extends B {}

A:子类、派生类、subclass

B: 父类、超类、基类、superclass

2.1体现:一旦 A继承父类 B 之后,子类 A 中就获取了父类 B 中声明的所有的结构:属性、方法

特别的,父类中声明为 private 的属性或方法,子类继承父类之后,仍然认为获取了父类中私有的机构

2.2 子类继承父类之后,还可以声明自己特有的属性或方法:实现功能的拓展

子类和父类的关系,不同于子集和集合的关系,即:子类反而可能比父类更丰富

extends:延展、拓展

三、Java 中关于继承性的规定

​ 1、一个类中可以被多个子类继承

​ 2、Java 中类的单继承性,:一个类只能有一个父类

​ 3、子父类是相对的概念,

​ 4、子类直接继承的父类,称为:直接父类; 间接继承的父类称为:间接父类

​ 5、子类继承父类以后,就获取了直接父类以及所有间接父类中声明的属性和方法

下图为例子来帮助理解一些:

尚硅谷 java 学习 b 站大学版 Day16 继承与多态_第1张图片

其中 Person 为 Graduate 的间接父类

Soldier、Student、Officer 的直接父类都是 Person

四 1、如果我们没有显式的声明一个类的父类话,则此类继承于 java.lang.Object 类

​ 2、所有的 java 类(除 java.lang.Object 类之外)都直接或间接的继承于 java.lang.Object 类

​ 3、意味着,所有的 java 类都具有 java.lang.Object类声明的功能



5-2 方法的重写(Override/overwrite)


定义:在子类中,可以**根据需要对从父类中继承来的方法进行改造**,也称为方法的重置、覆盖

mac 电脑上面方法重写快捷键为: control+O

应用:重写以后,当创建子类对象以后,通过子类对象调用子父类中同名同参数的方法时,实际执行的是子类重写父类的方法

重写的方法 是同名 同参数列表

区分方法的重载与重写

重写(Override): 是子类对父类允许方位的方法的实现过程进行重新编写,返回值和形参都不能改变。即外壳不变,核心重写。

重载(Overload):是在一个类里面,方法名字相同,二参数不同。返回类型可以相同也可以不同,每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

区别点 重载方法 重写方法
参数列表 必须修改 一定不能修改
返回类型 可以修改 一定不能修改
异常 可以修改 可以减少或删除,一定不能抛出新的或更广的异常
访问 可以修改 一定不能做更严格的限制(可以降低限制)


5.3 四种权限修饰符


类内部 同一个包 不同包的子类 同一个工程
private YES
(缺省) YES YES
protected YES YES YES
public YES YES YES YES

对于 class 的权限修饰符 只可以用 public 和 default (缺省)

public 类可以在任意地方被访问

default 类只可以被同一个包内部的类访问



5.4 关键字: super


super 关键字的使用:

1、super 理解为: 父类的…

2、super 可以用来调用:属性、方法、构造器

3、super的使用

​ 3.1 我么你可以在子类的方法或构造器中,通过使用“super.属性” 或“super.方法”的方式,显式的调用父类的属性或方法;但是通常情况下,我们都省略不写

​ 3.2特殊情况:当子类和父类中定义了同名的属性时,我们要想调用父类中的属性,则必须使用 super.属性来显式调用父类中声明的属性

​ 3.3 特殊情况: 当子类重写了父类的方法,我们想在子类的方法中调用父类被重写的方法,则必须使用 super.方法 来调用

4、super调用构造器

​ 4.1 我们可以在子类的构造器中 显式的使用“super(形参列表)”的方式,调用父类中声明的指定的构造器

​ 4.2“super(形参列表)”的使用,必须声明在子类构造器的首行

​ 4.3 我们在类的构造器中,针对"this(形参列表)"或“super(形参列表)”只能二选一

​ 4.4 在构造器的首行,没有显式的声明“this(形参列表)”“super(形参列表)”时,会有默认的父类空参的构造器 super()构造器

​ 4.5 在类的多个构造器中,至少有一个类的构造器中使用了“super(形参列表)”,调用父类中的构造器



5.5 子类对象的实例化

子类对象实例化的全过程

1.从结果上看:(继承性)

​ 子类继承父类以后,就获取了父类中声明的属性和方法

​ 创建子类的对象,在堆空间中,就会加载所有父类中声明的属性

2.从过程上来看:

​ 当我们通过子类的构造器创建子类对象时,我们一定会直接或间接的调用其父类的构造器,进而调用父类的父类的构造器…直到调用了 java.lang.object 类中的空参的构造器。正因为加载过所有的父类的结构,所以才可以看到内存中有父类中的结构,子类对象才可以考虑进行调用

明确:虽然创建子类对象时,调用了父类的构造器,但是自始至终就创建过一个对象,即为 new 的子类对象



5.6 面向对象特征之三: 多态性


1、理解多态性:可以理解为一个事物的多种形态

2、多态性是啥?

即对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)

多态的使用:当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法—虚拟方法调用

3、多态的使用:虚拟方法调用

​ 有了对象的多态性后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法

总结

总结编译看左边,运行看右边

4、多态的使用前提:a.类的继承关系 b.方法的重写

5、对象的多态性只适用于方法,不适应于属性(编译和运行都看左边)

多态性是运行时行为


你可能感兴趣的:(java,学习,python)