继承
文章目录
- 继承
- 为什么需要继承
- 继承中变量的访问特点
- 继承中方法的访问特点
- 继承的优缺点
概念:在Java中,继承是面向对象编程的一个基本特性。它允许我们定义一个新类,它从另一个已经存在的类继承其属性和方法。被继承的类称为父类或超类,新定义的类称为子类。
为什么需要继承
继承可以解决代码复用,让我们的编程更加靠近人类思维.当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过extends来声明继承父类即可。
上述图片中,学生类拥有属性:姓名,年龄,性别,学号。拥有方法:吃饭,睡觉,学习
教师类拥有属性:姓名,年龄,性别,工号。拥有方法:吃饭,睡觉,教书
为了使代码简化,我们将相同的属性提取出来,形成一个单独的类(父类,也称为基类),让学生类和教师类继承我们所提取出来的类,简化代码的冗余。
代码实现:
class Person{private String name;private char sex;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void eat(){System.out.println(this.name+"吃饭");}public void sleep(){System.out.println(this.name+"睡觉");}
}
class Student extends Person{private int stuNum;public int getStuNum() {return stuNum;}public void setStuNum(int stuNum) {this.stuNum = stuNum;}public void study(){System.out.println("学习");}
}class Teacher extends Person{private int teaNum;public int getTeaNum() {return teaNum;}public void setTeaNum(int teaNum) {this.teaNum = teaNum;}public void teach(){System.out.println("教书");}
}
public class Test01{public static void main(String[] args){Student student = new Student();student.setName("胡歌");student.setAge(41);student.setSex('男');student.setStuNum(123123);Teacher teacher = new Teacher();teacher.setName("吴彦祖");teacher.setAge(44);teacher.setSex('男');teacher.setTeaNum(456456);System.out.println(student.getName()+"--"+student.getSex()+"--"+student.getAge()+"--"+student.getStuNum());System.out.println(teacher.getName()+"--"+teacher.getSex()+"--"+teacher.getAge()+"--"+teacher.getTeaNum());}
}
运行结果:
注意:
- private修饰的内客,子类实际上也可继承只是因为封装的特性阻碍了直击调用,但是提供了间接调用的方法,可以间接调用。
- java中没有多继承,只能单继承,但是可以用实现接口的方式进行“多继承”。
继承中变量的访问特点
在子类方法中访问一个变量,最先在子类局部范围找,如果没有就在子类成员范围找,最后在父类成员范围找,如果都没有就报错。
继承中方法的访问特点
通过子类对象访问一个方法,先子类成员范围找,如果找不到就在父类成员范围找,如果都没有就报错。
继承的优缺点
优点:
- 代码重用:可以通过继承现有类的属性和行为,避免重复编写代码,提高代码复用性。
- 可扩展性:可以通过添加新的方法和属性来扩展现有类的功能,使代码更加灵活。
缺点:
- 继承具有较强的耦合性:子类和父类之间有较强的关联性,一旦父类发生变化,子类也需要相应地修改,增加了维护的难度。
现有类的属性和行为,避免重复编写代码,提高代码复用性。 - 可扩展性:可以通过添加新的方法和属性来扩展现有类的功能,使代码更加灵活。
缺点:
- 继承具有较强的耦合性:子类和父类之间有较强的关联性,一旦父类发生变化,子类也需要相应地修改,增加了维护的难度。
- 继承层次过深可能导致复杂性增加:如果继承层次过深,可能导致代码结构复杂,难以理解和维护。