1.继承的作用
为了提取两个类中公共的代码,可以使用继承抽取重复性的代码到一个公共类中。
这个公共的类称为父类(super class),继承于父类的类称为子类(sub class)。
2.java继承的特性
[1] 单根性。在java中,一个类只能有一个直接父类。
[2] 传递性。C继承于B,B继承于A,C具有A的特性和行为。
3.类B继承于类A,使用关键字extends,B拥有了A中非私有的属性和方法。
1 public class Person{ 2 String name; 3 int age; 4 5 public void showInfo(){ 6 System.out.println("姓名:"+name); 7 System.out.println(",年龄:"+age); 8 } 9 }
1 public class Student extends Person{ 2 3 }
1 public class Test01{ 2 public static void main(String[] args){ 3 Student s = new Student(); 4 s.name = "张三"; 5 s.age = 20; 6 s.showInfo(); 7 } 8 }
4.Super
super关键字表示父类对象,只是一个关键字,里面没有引用。
[1]super能访问父类构造方法
注意:super调用父类构造方法时,必须写到构造方法有效代码第一句。
[2] super调用父类的非私有属性
super可以访问父类的非私有属性。私有的属性不能用super访问。
当子类定义了一个和父类同名的属性时,在子类中优先访问子类的属性,如果要访问父类属性一定要加super。
[3]访问非私有父类方法
5.父类不能被子类继承的成员
6.继承关系的初始化顺序
7.继承关系内存图
8.方法的重写
当子类从父类继承过来的方法不能满足自身需要时,子类可以根据自身情况进行方法重写(overwrite/override)。
方法重写建立在继承的基础上,没有继承,就没有重写!
子类根据自身情况,可以选择部分重写和完全重写。
[1]部分重写
1 public void showInfo(){ 2 super.showInfo(); 3 System.out.println("我是一只"+this.getStrain()); 4 }
[2]完全重写
1 public void showInfo(){ 2 System.out.println("--"+super.getName()+"--"); 3 System.out.println("健康值:"+super.getHealth()); 4 System.out.println("亲密度:"+super.getLove()); 5 System.out.println("品种:"+this.getStrain());
[3]重写的规则
a.方法名称相同
b.参数列表相同
c.子类的访问权限一定 >= 父类访问权限
d.返回值和父类相同或者是其子类
1 public Pet create(){ 2 Pet pet = new Pet(); 3 return pet; 4 }
1 public Dog create(){ 2 Dog dog = new Dog(); 3 return dog; 4 }