面向对象第二大特征:继承
1.什么是继承?
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
继承的本质是对某一批类的抽象。
继承是类与类之间的关系。
2.继承关系的两个类:
1)基类:父类
2)派生类:子类
例如生活中的例子:
兔子和羊都属于食草动物,狮子和豹属于食肉动物,食草动物和食肉动物又都属于动物
虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,
因此,羊和兔子,狮子和豹 都会继承动物类(父类)的一些属性和方法,但也会具有各自食草动物类、食肉动物类的特性。
3.继承的表示方式
用extends关键字来表示子类继承父类。
例如:父类Person
classPerson{
}
子类Student 继承父类Person,表示方法如下:
class Student extendsPerson{
}
4.为什么需要继承?
假设有两个类,Student和Teacher:
Student属性(姓名,年龄) 方法(说话,学习)
Teacher属性(姓名,年龄) 方法(说话,教书)
Student类代码
public classStudent {privateString name;private intage;public Student(String name, intage) {this.name =name;this.age =age;
}public voidsay(String name){
System.out.println(name+ "说话!");
}public voidstudy(String name){
System.out.println(name+ "学习!");
}
}
Teacher类代码
public classTeacher {privateString name;private intage;public Teacher(String name, intage) {this.name =name;this.age =age;
}public voidsay(String name){
System.out.println(name+ "说话!");
}public voidteach(String name){
System.out.println(name+ "教书!");
}
}
我们看到Student和Teacher类中的姓名、年龄这些属性 和 方法say是重复了,这样每个类代码重复且臃肿,维护性不高,因此我们可以从这2个类再进行抽象,抽象成一个Person类,把公共部分提取出来。
Person类代码
public classPerson {private String name;//把Student、Teacher类的name抽象
private int age;//把Student、Teacher类的age抽象//父类的构造器
public Person(String name, intage) {this.name =name;this.age =age;
}//把Student、Teacher类的方法抽象成父类的方法say()
public voidsay(){
System.out.println(name+ "说话!");
}
}
Student类代码
public class Student extendsPerson {public Student(String name,intage) {super(name, age);//用关键字super调用父类的构造方法
}public voidstudy(String name){
System.out.println(name+ "学习!");
}
}
Teacher类代码
public class Teacher extendsPerson {public Teacher(String name,intage){super(name, age);//用关键字super调用父类的构造方法
}public voidteach(String name){
System.out.println(name+ "教书!");
}
}
我们用一个Test类 来测试代码
public classTest {public static voidmain(String[] args) {
Student student= new Student("小明",23);
Teacher teacher= new Teacher("王老师",39);
student.say();//继承父类Person的方法say()
teacher.say();//继承父类Person的方法say()
student.study("小英");//自身类的方法
teacher.teach("李老师");//自身类的方法
}
}
执行结果
5.继承说明
Java只有单继承,不支持多继承,但可以有多重继承,即一个子类,只有一个父类,一个父类,可以有多个子类。
6.继承特性
1)在Java中所有的类都默认直接或间接继承Object类,例如我们在idea 开发工具中 ,可以看到
2)继承的子类拥有父类非 private 的属性、方法。
3)子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
4)子类可以用自己的方式实现父类的方法。(方法重写rewrite)
5)在idea中可以用快捷键ctrl+H 打开继承树,通过继承树我们可以看到类之间的层次关系,最高的父类是Object