Java basic knowledge notes 2-inheritance

inherit

继承:就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接
访问父类中的非私有的属性和行为。
优点:
    1. 提高代码的复用性。
    2. 类与类之间产生了关系,是多态的前提。
继承主要解决的问题就是:共性抽取。
继承关系当中的特点:
	1.子类可以拥有父类的“内容”。
	2.子类还可以拥有自己专有的内容。

Insert picture description here

在父子类的继承关系当中,如果成员变量重名,则创建子类对象,访问有两种方式:
1.直接通过子类对象访问成员变量:
	等号左边是谁,就优先用谁,没有则向上找。
2.间接通过成员方法访问成员变量:
	该方法属于谁,就优先用谁,没有则向上找。
在子类中:
    局部变量:直接写成员变量名。
    本类的成员变量:this.成员变量
    父类的成员变量:super.成员变量名
在父子类的继承关系当中,创建子类对象,访问成员方法的规则:
	创建的对象是谁,就优先用谁,如果没有则向上找。
注意:无论成员方法还是成员变量,若果没有都是向上找父类,绝对不会向下找子类的。

Member method with the same name-override (Override)

如果子类父类中出现重名的成员方法,这时的访问是一种特殊情况,叫做方法重写 (Override)。
方法重写 :子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效
果,也称为重写或者复写。声明不变,重新实现。
方法覆盖的注意事项:
1.必须保证父子类之间方法的名称相同,参数列表也相同。
	@Override:写在方法前面,用来检测是不是有效的正确覆盖重写。
	这个注解就算不写,只要满足要求,也是正确的方法覆盖重写。
2.子类方法的返回值必须【小于等于】父类方法的返回值范围。
	小扩展提示:java.lang.Object类是所有类的公共最高父类(祖宗类),
	java.lang.String就是Object的子类。
3.子类方法的权限必须【大于等于】父类方法的权限修饰符。
	public > protected > (default) > private
	其中,(default)不是关键字default,而是什么都不写,留空。成员变量同理。
日后使用几乎都是保持权限相等关系。

Construction method

继承关系中,父子类构造方法的访问特点:
1.构造方法的名字是与类名一致的。所以子类是无法继承父类构造方法的。
2.子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行的子类构造。
3.子类构造可以通过super关键字来调用父类重载构造。
4.super的父类构造调用,必须是子类构造方法的第一个语句。不能一个子类构造调用多次super构造。
总结:子类必须调用父类构造方法,不写则默认存在super();写了则用写的指定的super调用,super只能有一个,还必须是第一个。

Summarize the three uses of the super keyword

1.在子类的成员方法中,访问父类的成员变量。
2.在子类的成员方法中,访问父类的成员方法。
3.在子类的构造方法中,访问父类的构造方法。

this keyword

super关键字用来访问父类内容,而this关键字用来访问本类内容。用法也有三种:
1.在本类的成员方法中,访问本类的成员变量。
2.在本类的成员方法中,访问本类的另一个成员方法。
3.在本类的构造方法中,访问本类的另一个构造方法。
在3中要注意:
	a.this(...)调用也必须是构造方法的第一个语句,唯一一个。
	b.super和this两种构造调用,不能同时使用。

Insert picture description here

Inherited characteristics

1.Java只支持单继承,不支持多继承。
2.Java语言可以多级继承。最高级(祖宗)为java.lang.Object
3.一个子类的直接父类是唯一的,但是一个父类可以拥有很多个子类。
总结:可以把继承看成一棵树。

Abstract class

Overview

如果父类当中的方法不确定如何进行{}方法体实现,那么这就应该是一个抽象方法。

Abstract method

就是加上abstract关键字,然后去掉大括号,直接分号结束。

Abstract class

抽象方法所在的类,必须是抽象类才行。在class之前协商abstract即可。

Use of abstract classes and abstract methods

1.不能直接创建new抽象类对象。
2.必须用一个子类来继承抽象父类。
3.子类必须覆盖重写抽象父类当中所有的抽象方法。
覆盖重写(实现方法)方式:子类去掉抽象方法的abstract关键字,然后补上方法体大括号。
4.创建子类对象进行使用。

Precautions

关于抽象类的使用,以下为语法上要注意的细节,虽然条目较多,但若理解了抽象的本质,无需死记硬背。
1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。
	理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。
2. 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。
	理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。
3. 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
	理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。
4. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象
类。
	理解:假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有
意义。

Guess you like

Origin blog.csdn.net/weixin_43215322/article/details/108630347