继承
首先我们先来看看定义的两个类,一个狗类一个企鹅类
很明显红线围住的部分重复了,如果再继续添加更多的动物种类,同样要求输出相同的内容,会导致过多的重复代码,而且后续进行修改的时候也非常麻烦
那么
我们可以把重复的部分放到父类里面,将狗和企鹅作为子类继承父类的属性和方法
如何使用继承
编写父类
public class Pet { //访问修饰符+class +类名
private String name; //共有的方法和属性
private int age;
private char sex;
public void eat() {//共有的方法
System.out.println("这是父类中吃的方法");
}
public void sleep() {
System.out.println("这是父类中睡觉的方法");
}
编写子类
public class Cat extends Pet{ //使用extends+父类名来来继承
private String love; //子类中特有的属性
public void voice() { //子类中特有的方法
System.out.println("猫叫的声音是:喵喵喵");
}
Ps:java中只支持单根继承,即一个类只能有一个直接父类,说白了就是只能有一个爹,但是爹上有爹,父类本身也可以作为子类去继承另一个类
子类访问父类的成员
- 访问父类的构造方法:
super(); //访问父类的无参构造
super(name); //访问父类的有参构造
- 访问父类的属性:
super.name;
- 访问父类的方法:
super.eat();
Ps:使用super来访问父类的成员
- super只能出现在子类的方法和构造方法中
- super调用构造方法中,只能是第一句
- super不能访问父类的private成员
继承条件下的构造方法
继承条件下的构造方法的调用规则
- 子类构造方法没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身其他构造方法时:系统默认调用父类的无参构造方法
例如
public class Pet {
public Pet() {
System.out.println("这是个父类的无参");
}
}
public class Cat extends Pet{
//子类中什么都没有
}
public class Test {
public static void main(String[] args) {
Cat cat = new Cat();
}
}
结果:
- 子类构造方法通过this显式调用自身其他构造方法时,在相应的构造方法中应用上面的的规则
Ps:子类不能继承父类的构造方法,只能调用
小结:继承与真实世界类似,只要说狗,那么狗的很多属性就不言自明了。比如四条腿,有牙齿等,往下区分还能分为哈士奇、柯基、柴犬,他们在拥有狗的共同点的同时,还各自拥有自己的特点