龙空技术网

JAVA你可能不知道的事——继承&抽象类

御天说书 105

前言:

现时兄弟们对“java父类继承”大概比较重视,看官们都想要分析一些“java父类继承”的相关知识。那么小编在网摘上搜集了一些有关“java父类继承””的相关内容,希望朋友们能喜欢,看官们一起来学习一下吧!

一、继承

1.1 概述:当多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可。 其中,多个类可以称为子类,单独那一个类称为父类。

1.2 定义: 继承就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。

1.3 好处:

1. 提高代码的复用性。

2. 类与类之间产生了关系,是多态的前提。

1.4 格式:

class 父类 {

...

}

class 子类 extends 父类 {

...

}

1.5 继承后的特点——成员变量

1.5.1 如果子类父类中出现不重名的成员变量,这时的访问是没有影响的。

1.5.2 如果子类父类中出现重名的成员变量,在子类中需要访问父类中非私有成员变量时,需要使用super关键字来修饰父类成员变量。使用格式:super.父类成员变量名

1.6 继承后的特点——成员方法

1.6.1 如果子类父类中出现不重名的成员方法,这时的调用是没有影响的。对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。

1.6.2 如果子类父类中出现重名的成员方法,这时的访问是一种特殊情况,叫做方法重写 (Override):子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。特点:创建的是子类对象,则优先用子类方法。

1.6.3 注意事项:

1. 必须保证父子类之间方法的名称相同,参数列表也相同。

@Override:写在方法前面,用来检测是不是有效的正确覆盖重写。

这个注解就算不写,只要满足要求,也是正确的方法覆盖重写。

2. 子类方法的返回值必须【小于等于】父类方法的返回值范围。

小扩展提示:java.lang.Object类是所有类的公共最高父类(祖宗类), java.lang.String就是Object的子类。

3. 子类方法的权限必须【大于等于】父类方法的权限修饰符。

小扩展提示:public > protected > (default) > private

备注:(default)不是关键字default,而是什么都不写,留空。

1.7 继承后的特点——构造方法

1.7.1 子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行的子类构造。

1.7.2 子类构造可以通过super关键字来调用父类重载构造。

1.7.3 super的父类构造调用,必须是子类构造方法的第一个语句。不能一个子类构造调用多次super构造。

1.7.4 总结:子类必须调用父类构造方法,不写则赠送super();写了则用写的指定的super调用,super只能有一个,还必须是第一个。

1.8 覆盖重写的应用场景:子类可以根据需要,定义特定于自己的行为。既沿袭了父类的功能名称,又根据子类的需要重新实现父类方法,从而进行扩展增强。

1.9 super关键字的用法有三种:

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

2. 在子类的成员方法中,访问父类的成员方法。

3. 在子类的构造方法中,访问父类的构造方法。

1.10 this关键字的用法有三种:

1. 在本类的成员方法中,访问本类的成员变量。

2. 在本类的成员方法中,访问本类的另一个成员方法。

3. 在本类的构造方法中,访问本类的另一个构造方法。

在第三种用法当中要注意:

A. this(...)调用也必须是构造方法的第一个语句,唯一一个。

B. super和this两种构造调用,不能同时使用。

1.11 this和super关键字图解:

1.12 继承的特点:

1. Java只支持单继承,不支持多继承。

2. Java支持多层继承(继承体系)。

二、抽象类

2.1 定义:

抽象方法:没有方法体的方法。

抽象类:包含抽象方法的类。

2.2 使用格式:

2.2.1 抽象类定义格式:

abstract class 类名字 {

}

2.2.2 抽象方法定义格式: public abstract 返回值类型 方法名 (参数列表);

2.3 注意事项:

1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。

2. 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。

3. 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

4. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。

标签: #java父类继承