20220724-Java的继承
含义
继承Extends
面向对象最显著的一个特性,继承是从已有的类中派生出新的类,新的类能吸收已有类的性和方法,并能扩展新的能力。
代码示例
class People {
//父类的私有属性
private String name;
private String color;
private int age;
//父类构造器
public People(String name, String color, int age) {
this.name = name;
this.color = color;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//父类共有方法
public void eat() {
System.out.println("吃东西");
}
}
class Student extends People {
//子类特有属性
private int id;
//子类构造器
public Student(String name, String color, int age, int id) {
super(name, color, age);
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
//子类可以覆盖父类中已有的方法,进行差异化设计
@Override
public void eat() {
System.out.println("学生吃东西");
}
//子类中特有的方法
public void xuexi() {
System.out.println("学习");
}
}
使用方法和注意事项
- 子类自动拥有父类定义的属性和方法
- 父类又叫做超类、基类
- 子类又叫导出类、派生类
- 继承可以调高代码复用性
- 继承提高代码扩展性和维护性
- 子类必须调用父类的构造器,完成父类的初始化
- 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中显示使用super去指定调用父类的哪个构造器完成父类的初始化工作,否则编译不通过
- super在使用时,需要放在构造器第一行
- super()与this()都只能放在构造器第一行,因此两个方法不能存在同一个构造器中
- Java所有类都是Object类的子类
- 子类最多只能继承一个父类(直接继承),java为单继承机制
- 不能滥用继承,子类和父类的关系需要满足is-a的逻辑关系
- 继承设计的基本思想:父类的构造器完成父类属性的初始化,子类构造器完成子类属性的初始化
个人理解
- 因为继承是is-a的关系,子类需要具有父类的属性和方法,但可以保持其独特性和扩展性,比如学生和职员都属于人类,可以将人类作为基类,而学生和职员分别作为子类;人类都具备姓名、性别等属性,都具备吃饭、睡觉等方法,但是学生除上述外还具备学号、分数等一些特有属性,具备上课学习等特有方法。
- 基类中应该包含共有的属性和方法

浙公网安备 33010602011771号