继承
继承:就是子类继承父类的属性和方法,使得子类对象具有与父类相同的属性、相同的方法。子类可以直接访问父类中的非私有的属性和非私有方法。
继承的好处:
- 提高代码的复用性。
- 类与类之间产生了关系,是多态的前提。
继承的格式:
通过extends关键字,可以声明一个子类继承另外一个父类,定义格式如下:
class 父类 {
... ...
}
class 子类 extends 父类 {
... ...
}
继承后的特点——成员变量
- 成员变量不重名
如果子类父类中出现不重名的成员变量,这的访问是没有影响的。 - 成员变量重名
如果子类父类中出现重名的成员变量,这是的访问是有影响的。代码如下:
class Fu {
//Fu类中的成员变量
int num = 5;
}
class Zi extends Fu {
//Zi类中的成员变量
int num = 6;
public void show() {
//访问父类中的num
System.out.println("Fu num" + num);
//访问子类中的num
System.out.println("Zi num" + num);
}
}
class ExtendsDemo {
public static void main(String[] args) {
//创建子类对象
Zi z = new Zi();
//调用子类中的show方法
z.show();
}
}
演示结果
Fu num = 6
Zi num = 6
子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要使用 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 num = 5
Zi num = 6
继承之后成员变量的特点
父子类成员变量不重名:无任何影响
父子类成员变量重名:遵守就近原则
就近原则:首先先在局部位置查找,如果找到了就直接使用,如果没有找到,就去子类成员位置查找,如果子类成员位置有就直接使用,如果没有找到,就去父类的成员位置查找,如果找到了就直接使用,如果找不到,就报错。
如果在子类的方法中需要同时访问父子类同名的成员变量:
访问父类: super.成员变量名
访问子类: this.成员变量名
继承后的特点——成员方法
- 成员方法不重名
如果子类父类中出现不重名的成员方法,这时的调用是没有影响的。对象调用方法时,会现在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若不存在就会执行父类中相应的方法。 - 成员方法重名----重写(override)
如果子类父类中出现重名的成员方法,这时的问是一种特殊情况,叫做方法重写 (Override)。
方法重写 :子类中出现与父类一模一样的方法时(返回值类型,方法名****和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。代码如下:
class Fu {
public void show() {
System.out.println("Fu show");
}
}
class Zi extends Fu {
//子类重写了父类的方法
public void show() {
System.out.println("Zi show");
}
}
public class ExtendsDemo02{
public static void main(String[] args) {
Zi z = new Zi();
//子类中有show方法,只执行重写后的show方法
z.show();
}
}
演示结果:
Zi show
继承后成员方法的特点
父子类出现不重名的成员方法,无任何影响
父子类出现重名的成员方法,会优先调用子类中定义的方法
继承的特点
- java只支持单继承,不支持多继承。
//一个类只能有一个父类,不可以有多个父类。
class C extends A{} //ok
class C extends A,B... //error
- java支持多层继承。
calss A{}
class B extends A{}
class C extends B{}
- 子类拥有父类的成员变量和成员方法
- 子类只能直接访问父类的非私有成员,不能直接访问私有成员(成员变量和成员方法),间接访问私有成员:
1、 访问父类的而私有成员变量 通过set\get方法
2、访问父类的私有成员方法 通过其他公共的方法