继承
什么是继承
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
如何使用继承
继承使用
1、首先编写父类
访问修饰符 class Pet{
//公共的属性和方法
}
2、编写子类,继承父类
访问修饰符 class Dog extends Pet{
//子类特有的属性和方法
}
关键字extends
Java中只支持单根继承,即一个类只能有一个直接父类,但是可以有多个间接父类。(间接父类,比如父类的父类就是子类的间接父类)
何时使用继承
当两个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取到相同的父类中。符合is-a(dog is a pet)关系的设计使用继承,将子类共有的属性和行为放到父类中。
理解继承
子类可以继承父类什么
1、继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包里。
2、继承默认权限修饰符修饰的属性和方法,但子类和父类必须在同一个包里。
子类不能继承父类什么
1、private修饰的属性和方法
2、子类和父类不在同一个包里,不能继承默认权限修饰符修饰的属性和方法
3、构造方法不能继承,但是可以在子类中调用父类的构造方法。
super关键字
super的使用
子类访问父类成员
1、访问父类属性
super.属性名;
2、访问父类方法
super.方法名();
3、访问父类构造方法
访问修饰符 子类名(无参或者参数名){
super(); //调用父类无参构造方法
或super(name);//调用父类的有参构造方法
}
super的使用场景
1、子类方法重写父类方法
public class Dog{
public void showInfo(){
super.showInfo();//调用父类的方法
//子类该方法中独有的功能
}
}
2、在子类中定义了和父类同名的成员变量,super可以使被屏蔽的成员可见。访问父类的父类的成员,也用super.属性名/方法名。
使用super的注意事项
1、使用super关键字,super代表父类对象
2、super只能出现在子类的方法和构造方法中
3、super调用构造方法时,必须在第一句。
4、super不能访问父类的private成员
this和super的区别
区别 | this | super |
---|---|---|
访问属性 | 访问本类属性,如果没有则从父类找 | 访问父类属性 |
访问方法 | 访问本类方法,如果没有则从父类找 | 访问父类中的方法 |
访问构造 | 调用本类构造,放在构造方法首行 | 调用父类构造,放在子类构造方法首行 |
继承条件下的构造方法
继承条件下构造方法的调用规则
1、子类构造方法没有通过super调用父类的有参构造方法,也没有通过this调用自身的其他构造方法,则系统默认调用父类的无参构造方法
2、子类构造方法通过super调用父类的有参构造方法,则执行父类相应的构造方法,而不执行父类的无参构造方法。
3、子类构造方法通过this调用自身的其他构造方法,则在相应构造方法中应用以上两条规则。