继承:
格式:public class 子类名 extends 父类名{}
继承中子类可以有父类的内容,也有自己特有的内容;
super关键字:代表父类储存空间的标识(可以理解为父类对象的引用)
this和super
this.成员变量 //访问本类成员变量
this(…) //访问本类构造方法
this.成员方法 //访问本类成员方法
super.成员变量 //访问父类成员变量
super.(…) //访问父类构造方法
super.成员方法 //访问父类成员方法
子类中所有构造方法都会默认访问父类的无参构造方法
因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化前,一定要先完成父类数据的初始化
每个子类构造方法的第一条语句默认都是:super()
父类没有无参构造方法的解决方法:
- super(参数);
那么会访问父类中的带参构造方法
- 手动在父类中创建无参构造方法,例如:
public 父类s{}
如果子类和父类都有一个相同的方法,那么子类的方法会覆盖父类的方法,但是也可以用super.方法名() 来调用父类的方法
也就是说通过子类对象访问一个方法,先在子类范围内找,然后在父类范围找,没有就报错,不考虑父亲的父亲
方法重写:
子类中出现了和父类中一模一样的方法声明就是方法重写
应用:
当子类需要父类的功能,而功能主体子类有自己特有的内容时,可以重写父类中的方法,这样,既沿袭了父类的功能,又定义了
子类特有的内容
当方法重写时,可以用@Override放在重写方法的上面用来检车重写方法是否有错误;
子类重写方法时它的访问权限必须大于父类
例如如父类是默认访问修饰符
那么子类就可用默认方法修饰符或者public修饰符
public>默认>私有
既私有方法不能被重写
在java中只能继承单个类,不能继承多个类,但是可以多层继承
也就说儿子继承爸爸,爸爸继承爷爷,那么儿子就有爸爸和爷爷的内容;
Student和Teacher都是Person的子类,Demo是测试类,Person是父类
子类不能直接访问父类的私有函数,Student创建s3时输入参数时用的是带参构造方法,但是Student类中的带参构造方法有一个super(name,age);就是通过这个方法来将name和age传入到父类,使用父类的内容