继承概述
就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。
继承特点
①.继承特点
②.继承好处
提高代码的复用性,(减少重复无意义的代码)
类和类之间产生了关系,这是多态的前提
继承格式
1.继承的定义格式
通过 extends 关键字,声明 一个子类 继承另 一个父类。
成员变量
1.成员变量不重名访问
如果未出现重名变量,正常访问即可
class Denmo{
public static void main(String[] args){
Zi z = new Zi();
Zi.one();
Fu f = new Fu();
Fu.two();
}
class Fu{
int x = 1;
}
class Zi{
int
}
}
2.成员变量重名访问
如果子类父类中出现重名的成员变量,这时的访问是有影响的。
需要使用super关键字访问
class Zi extends Fu {
// Zi中的成员变量
int num = 6;
public void show() {
//访问父类中的num
System.out.println("Fu num=" + super.num); //访问子类中的num
System.out.println("Zi num=" + this.num); }
}
总结
- Fu类中的成员变量是非私有的,子类中可以直接访问。
- 若Fu类中的成员变量私有了,子类是不能直接访问的。
- 通常编码时,我们遵循封装的原则,使用private修饰成员变量,
成员方法
1.成员方法不重名
成员方法不重名时,正常访问即可
优先查找子类对应方法,如果没有,会在父类中查找
class Fu{
public void show(){
System.out.println("Fu类中的show方法执行"); }
}
class Zi extends Fu{
public void show2(){
System.out.println("Zi类中的show2方法执行"); }
}
public class ExtendsDemo04{
public static void main(String[] args) {
Zi z = new Zi();
//子类中没有show方法,但是可以找到父类方法去执行
z.show();
z.show2();
}
}
2.成员方法重名(重写(override))
如果出现重名,会出现一种特殊访问,方法重写:
子类中出现与父类一模一样的方法时(返回值类型,方法名 和 参数列表都相同),会出现覆盖效果,
也称为重写或者复写。声明不变,重新实现
class Fu {
public void show() {
System.out.println("Fu show");
}
}
class Zi extends Fu {
//子类重写了父类的show方法
public void show() {
System.out.println("Zi show");
}
}
public class ExtendsDemo05{
public static void main(String[] args) {
Zi z = new Zi();
// 子类中有show方法,只执行重写后的show方法
z.show(); // Zi show
}
}
总结
- 子类方法覆盖父类方法,必须要保证权限大于等于父类权限。
- 子类方法覆盖父类方法,返回值类型、函数名和参数列表都要一模一样
- 子类可以根据需要,定义特定于自己的行为。既沿袭了父类的功能名称,又根据子类的需要重新实现父类方法,从而进行扩展增强。
构造方法的继承
1.构造方法不可以继承
2.构造方法的作用是初始化成员变量的。
所以子类的初始化过程中,必须先执行父类的初始化动作。
子类的构造方法中默认有一个super() ,表示调用父类的构造方法,父类成员变量初始化后,才可以给子类使用。
3.在子类构造方法中的第一行默认有 super() ,给父类进行初始化的
4.在子类构造方法中可以手动调用父类其他重载的构造方法
格式: super(参数列表);
5.super 是写在子类的构造方法的第一行