继承
继承概述
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,这个类就是父类,那么多个子类无需再定义这些属性和行为,只要 继承那一个类即可
自己理解继承关系原理图
子类父类称呼
子类又叫派生类
父类又叫 基类、超类
继承的特点
子类自动拥有父类非私有的成员
解释:就是调用的成员子类并没有,可以直接去父类寻找,要是父类也没有就去父类的父类去寻找,以此类推知道Object类,要是Object类都没有,则会出现编译器报错
子类对于访问父类中的私有成员
解释:就是调用的成员子类并没有,可以直接去父类寻找,要是父类的此成员是私有的,那么将不再继续向父类的父类中寻找,而是直接显示编译异常
子类也可以拥有自己的成员
继承的好处
提高代码的复用性。
类与类之间产生了关系,是多态的前提
注意
一个子类只能继承一个父类
一个父类可以有好多子类
子类中成员变量和方法与父类名一样时
可以使用super.成员变量、super.成员方法
方法重写
什么是方法的重写
方法重写:子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),子类中访问修饰符必须大于等于重些父类方法的访问修饰符,会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。
方法重写的注意事项
1. 子类方法重写父类方法,必须要保证权限大于等于父类权限,最好修饰权限一样。 2. 子类方法重写父类方法,返回值类型、方法名和参数列表都要一模一样。
方法重写的应用场景
子类可以根据需要,定义特定于自己的行为。既沿袭了父类的功能名称,又根据子类的需要重新实现父类方法,从
构造方法执行特点
描述
1.构造方法的名字是与类名一致的。所有子类是无法继承父类构造方法的。
2.构造方法的作用是初始化成员变量的。所以子类的初始化过程中,必须先执行父类的初始化动作。子类的构
造方法中默认有一个super() , 表示调用父类的构造方法,父类成员变量初始化后,才可以给子类使用。
访问构造方法的注意事项
* 在子类构造方法中的第一行默认有 super() ,给父类进行初始化的 * 在子类构造方法中可以手动调用父类其他重载的构造方法,一但采用这种方法,则默认super()会被覆盖 格式: super(参数列表); * super 是写在子类的构造方法的第一行.
super 和 this 的
super和this的含义
==super:前提:继承关系 。 代表父类的存储空间标识(可以理解为父亲的引用)。==
==this:代表当前对象的引用(谁调用就代表谁)。==
super 注意点
用super调用父类成员,要是父类成员没有,就继续向父类的父类寻找,直到Object都没有会报错
要是用super调用父类的私有成员也会报错
访问构造
this(...) ‐‐ 本类的构造方法 super(...) ‐‐ 父类的构造方法
子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的super()。
super()和this()都必须是在构造方法的第一行,所以不能同时出现。
抽象类
抽象类拥有的成员和普通类拥有的成员一样,但是比普通类多了一个抽象方法
抽象类的格式
public abstract class 类名字 { }
抽象类注意事项
抽象类不能实例化对象
普通类继承抽象类时要重写抽象类的全部抽象方法
抽象类继承抽象类时则可以不用重写抽象类的抽象方法和普通方法
抽象方法
定义格式:修饰符 abstract 返回值类型 方法名 (参数列表);
注意
抽象方法没有方法体
有抽象方法的类一定是抽象类
abstract不能和以下关键字一块使用
private 冲突 final 冲突 static 冲突