一、继承概念
在现实生活中我们常听到继承我的花呗,继承遗产等等。
在Java中就是一个类继承另一个类,然后就拥有了那个类的成员变量和成员方法。
继承类被叫为子类(也叫派生类),被继承的类就叫父类(也叫基类,超类)。
继承最大的作用就是实现对代码的复用。
二、定义格式
使用关键字extends来实现,在定义子类时加上子类 extends 父类
。
Java中每一个类只能有继承一个父类。
在Java中最多不希望超过3层继承。
例如,Dog类继承Animal类定义如下:
class Animal{
}
class Dog extends Animal{
}
三、父类成员的访问
当子类成员和父类成员出现同名的情况的时候,会默认访问子类成员。
例如在下面代码中在子类中设置名字时设置的是子类中的name。
class Animal{
String name;
}
class Dog extends Animal{
String name;
public void setNam(String na){
name = na;
}
}
3.1 成员(包括成员变量和成员方法)访问规则
访问规则有如下3条:
- 如果访问的成员变量子类中有,优先访问自己的成员变量。
- 如果访问的成员子类中无,则访问父类中继承下来的,如果父类中也没有,则编译报错。
- 如果访问的成员与父类的成员同名,则优先访问自己的。
注意要考虑访问修饰限定符的修饰。
3.2 super关键字
那想访问父类的成员要如何做呢? 就需要使用关键字super,如上述代码进行下列修改就是访问的父类的name。
class Animal{
String name;
}
class Dog extends Animal{
String name;
public void setNam(String na){
super.name = na;
}
}
3.3 super使用规则
使用规则有如下四条:
super.变量名;
访问父类重名成员变量。super.方法名();
访问父类重名成员方法。super();
访问父类构造方法,必须在第一行。- super只能访问直接父类。
3.3.1 访问父类构造方法注意事项
当父类中提供了构造方法,子类必须也提供相同参数的构造方法。
当我们父类提供了,子类没提供就会报错。(先要帮父类成员变量初始化,我称为“尽孝“”)
因为super调用父类构造函数和this调用构造函数都必须要在第一行,所以不能同时出现。
四、代码执行顺序
静态只执行一次,父类优先子类执行。
执行顺序如下:
- 父类的静态代码块。
- 子类的静态代码块。
- 父类的构造代码块。
- 父类的构造方法。
- 子类的构造代码块。
- 子类的构造方法。
五、final关键字
final和c语言中const类似。
在Java中最多不希望超过3层继承。那我们要想该类不能再被继承,就可以用final来修饰该类。
final修饰放在访问修饰限定符前面后面都可以
public final class Animal{ }
final public class Animal{ }
final修饰注意事项:
- final修饰成员变量将其改为常量,不能修改。
- final修饰引用数据,引用指向的地址不能变,但对象值可变。如:
- final修饰类,表示该类不能被继承。
- final修饰方法,表示该方法不能被重写。