面向对象三大特性: 封装性(Polymorphism),继承性(Inheritance),多态性(Polymorphism)
继承是多态的前提,没有继承就没有多态!
继承
继承主要解决:共性抽取
如图,因为讲师类和助教类都有相同属性(姓名和工号),因此将这两个属性抽取出来放在员工类,让讲师类和助教类继承员工类的属性。这样就不用每个类都定义一遍相同的属性(或方法):

父类:parent class superclass
子类:subclass child class
继承的格式
在上面的关系里,因为子类和父类拥有完全相同的属性,子类可以被看成父类(即讲师就是一个员工)。因此关系为 is-a;

定义一个父类:

定义子类(extends 意思是说 SubClass is extends of ParentClass)

在主class中实例化子类,就可以调用子类从父类那继承的方法

方法被运行:
![]()
继承关系也被成为 Is-a
这种关系是单向的:子类可以继承调用父类的东西,但父类不可以继承调用子类的东西
在 UML 里用空心箭头Hollow arrows表示

在继承关系中成员变量(属性)的访问
定义一个父类

定义一个子类

在主类中运行

若在继承关系中出现成员变量同名的情况:
访问规则:
1.直接访问
即直接通过子类对象访问成员变量。
(等号左边是谁,就优先谁。没有就向上找)
用上面的例子,在父类和子类里分别添加同名的变量:
![]()
![]()

输出
![]()
若子类里没有该属性,就向上到其父类里面找
2.间接访问
通过成员方法访问成员变量。
在这种情况下,被调用的方法,只会优先访问该方法所在类里的成员变量

若方法所在类没有该方法所需调用的成员变量,就往父类里找
父类.子类的成员变量,局部变量三者重名时的访问


分别用以下方法访问:
(该方法在子类中)

super 关键字
It is used to access attributes and methods in the superclass of an
object
与之相比,this关键字就是访问本类或本对象的方法或成员变量。

通常,subclass必须调用superclass的构造方法来初始化参数。
我们通常使用父类的constructor来innitialize对象里从父类继承的部分。

养成习惯在子类的构造方法里添加super()来调用父类构造方法
在继承关系中,构造方法的访问
1.子类构造方法中默认有一个隐藏的"super()"调用。因此调用子类构造方法的时候会先调用父类构造方法
![]()
2.子类构造可以通过super关键字调用父类重载构造 通过super(参数)调用父类的有参构造方法
3.super的父类构造调用,必须是子类构造方法的第一个语句。
也不能同时调用两个

4.子类必须调用父类构造方法,不写则自动添加运行super(),写了则用指定的super调用
protected 关键字(visibility modifier 可见性修饰符)

所有的方法和变量(包括使用了private关键字的)都会被子类继承,且内存会被分配给他们。
只有public和protected声明的方法和变量能被子类调用,private则不可以。
简单来说protected修饰的方法和变量只能被其子类或子类的子类所访问。
构造方法不能被继承:

在继承关系中,对于方法的访问
与属性一样,子类会继承父类方法。所以子类拥有的方法=子类方法+父类方法
其调用也与属性一样 子类对象. 子类方法
若子类与父类各自拥有的方法重名,优先级和属性一样:创建的对象是谁(即子类对象.方法 这里的子类对象是哪个类),就优先用谁的方法。没有就向上找
即先子类 ,子类没有再找父类。
在继承关系中,方法的重写override
用途:当子类所继承的方法需要改动时,我们通常就在子类中重写该方法而不是在父类中去更改。
换句话说,在实际环境中,往往一个类以及投入使用,若要改动其方法就会影响正在使用的用户,因此推荐用一个子类对其继承后再在子类里面进行重写。
1.在继承关系中,子类父类各自拥有的方法名称一样,参数列表也一样时
2.同时子类方法的返回值必须小于等于父类方法的返回值范围
此时可以写@override(是一个注解)在方法前,检测是不似乎有效的正确的覆盖重写(比如signature是否写正确)
3. 子类方法的权限必须大于等于父类方法的权限修饰符(public>protected>(default)>privat)(default)不是关键字 是留空的意思
什么时候需要使用重写:




主类


本文介绍了面向对象编程中继承的概念,解释了如何使用继承来抽取共性,并探讨了成员变量的访问规则。文章详细讨论了super关键字的作用,以及在子类构造方法中调用父类构造方法的重要性。此外,还阐述了protected关键字的可见性,以及方法重写(override)的条件和应用场景。
1381

被折叠的 条评论
为什么被折叠?



