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