java 类继承
一、继承的概念
将已有的功能加以扩展,实现代码的重复使用
现有类成为父类、基类 ,衍生出的类称为子类、衍生类
java只允许单一继承,要实现多重继承,需要借助于接口。
二、继承关系
父类 子类
成员函数或变量 可继承,public protected 类型的成员可以直接在子类内访问,private类型成员,只能借助父类函数访问
构造函数 不可继承
设定终止继承的成员 不可继承,在父类的方法之前加上final关键字,子类方法不能覆盖。
三、构造函数的调用顺序
原则:首先调用父类的构造函数,若父类有多个构造函数,默认调用没有参数的构造函数,如果没有无参的构造函数则必须使用super来指定需要调用的构造函数 ,可以使用super()重载,根据参数的不同选择需要调用的构造函数,super()必须放在第一行执行。
构造函数内使用this() 和super()
1、this()来调用同一类内的其他构造函数,必须放在第一行
2、super()从子类的构造函数调用其父类的构造函数,必须放在第一行。
四、覆盖
子类可以重写父类的成员,以覆盖父类成员,要访问父类成员可以使用super.成员
五、终止继承
使用final关键字
对类使用,该类不允许有子类
对成员函数,该成员函数不允许被重写
对成员变量,该成员变量不允许被修改
六、举例
package com;
public class JavaHello {
public static void main(String ar[])
{
//由于子类构造函数中super(4),首先调用父类有参数的构造函数, 然后调用子类构造函数
CChild cb = new CChild();
//调用父类无参数的构造函数
CFather cba = new CFather();
cb.play();
cb.setColor(4);
cba.setColor(2);
System.out.println(cb.getColor() + cb.style);
System.out.println(cba.getColor());
}
}
//父类
class CFather{
private int color;
protected int style;
public CFather(){
System.out.println("父类构造无参");
}
public CFather(int h){
System.out.println("父类构造有参");
}
public void play(){
System.out.println("CBall play");
}
public void setColor(int color) {
this.color = color;
}
public int getColor() {
return color;
};
}
//子类
class CChild extends CFather{
//覆盖父类成员变量
public int color;
public CChild(){
super(4);
System.out.println("子类构造");
this.style = 5;
this.play();
}
}
执行结果:
父类构造有参
子类构造
CBall play
父类构造无参
CBall play
9
2