继承,是面向对象软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。

1-1.继承的概述

继承是多态的前提,如果没有继承,就没有多态。

继承主要解决的问题:共性抽取。

特点:

1).子类可以拥有父类的内容。

2).子类还可以拥有自己的内容。

1-2.继承的格式

定义父类的格式:和一个普通类的定义格式一样。

定义子类的格式:

      public class 子类名 extends 父类名 { }

1-3.继承中成员变量与成员方法的访问特点

在父子类继承关系中,如果成员变量重名,则创建子类对象时,访问方式有两种:
1).直接通过子类对象访问成员变量。在定义对象时,等号左边是谁,访问变量时就优先用谁的变量,如果没有,便向上找,若全部没有则编译报错。

2).间接通过成员方法访问成员变量。其中,成员方法属于谁,就用谁,没有就往上找。

在父子类继承关系中,创建子类对象,访问成员方法的规则:创建对象是谁,就优先用谁,如果没有,就往上找。

注意:无论是成员变量还是成员方法,若在本类中没有都是往上找,绝不会向下找。

1-4.区分子类中重名的三种变量

局部变量       本类变量     父类变量

直接写成员变量    this.变量名    super.父类成员变量名

在父子类继承关系中,创建子类对象,访问成员方法的规则:创建对象是谁,就优先用谁,如果没有,就往上找。

注意:无论是成员变量还是成员方法,若在本类中没有都是往上找,绝不会向下找。

1-5.继承中方法的覆盖重写

重写,指在继承关系中,方法的名称一样,参数列表也一样。

注意区分重写与重载:

重写:方法名一样,参数列表也一样。

重载:方法名一样,但是参数列表不一样。

方法重写的特点:创建的是子类对象,则优先用子类方法。

注意事项:

1).必须保证父子类之间的方法名称和参数列表相同,可以通过在前面加注解@Override验证是否正确重写了,但不写注解也是正确的。

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

(扩展:Java.lang.Object类是所有类的公共最高父类)

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

(扩展:权限修饰词:public>protected>(default)>private。备注:default不是关键字,而是什么都不写,留空)

覆盖重写的使用原则:对已使用的类,尽量不要重写去定义一个新类,而应该对原来的类进行更新修改。

1-6.继承中的构造方法的访问

特点:

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

2).可以通过super关键字在子类构造重载调用父类构造。

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

2-1.super关键字的三种用法

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

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

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

2-2.this关键字的三种用法

super关键字用于访问父类内容,this关键字用于访问本类的内容。

this用法:

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

2).在本类成员方法中,访问本类的成员方法。

3).在本类构造方法中,访问本类的另一个构造方法。注意,this在调用的也必须是构造方法中的第一个语句,也是唯一一个。

注意:this和super这两种构造调用,不能同时使用。

2-3.Java继承的三个特点

1).Java语言是单继承的,一个类的直接父类只能有唯一一个。

2).Java语言可以多级继承。

3).Java中最高父类是Java.lang.Object

一个子类的直接父类是唯一的,但一个父类可以有很多个子类,子类之间为兄弟类关系。

2-4.抽象的概念和格式

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

抽象方法:加上abstract关键字,然后去掉大括号直接分号结束。

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

2-5.抽象方法和抽象类的使用

1).对抽象类,不能直接创建抽象类对象。

2).必须使用一个子类继承抽象父类。

3).子类必须覆盖重写抽象父类当中所有的抽象方法。

覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后补上方法体大括号。

4).创建子类对象进行使用。

2-6.抽象方法和抽象类的注意事项

注意事项:

1).抽象类不能直接创建抽象类对象。

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

3).抽象类中,不一定包含抽象方法,但又抽象方法的一定时抽象类。

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

守着安静的沙漠,等待着花开...