继承
文章目录
- 继承
- 为什么需要继承
- 继承中变量的访问特点
- 继承中方法的访问特点
- 继承的优缺点
概念:在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中没有多继承,只能单继承,但是可以用实现接口的方式进行“多继承”。
继承中变量的访问特点
在子类方法中访问一个变量,最先在子类局部范围找,如果没有就在子类成员范围找,最后在父类成员范围找,如果都没有就报错。
继承中方法的访问特点
通过子类对象访问一个方法,先子类成员范围找,如果找不到就在父类成员范围找,如果都没有就报错。
继承的优缺点
优点:
- 代码重用:可以通过继承现有类的属性和行为,避免重复编写代码,提高代码复用性。
- 可扩展性:可以通过添加新的方法和属性来扩展现有类的功能,使代码更加灵活。
缺点:
- 继承具有较强的耦合性:子类和父类之间有较强的关联性,一旦父类发生变化,子类也需要相应地修改,增加了维护的难度。
现有类的属性和行为,避免重复编写代码,提高代码复用性。 - 可扩展性:可以通过添加新的方法和属性来扩展现有类的功能,使代码更加灵活。
缺点:
- 继承具有较强的耦合性:子类和父类之间有较强的关联性,一旦父类发生变化,子类也需要相应地修改,增加了维护的难度。
- 继承层次过深可能导致复杂性增加:如果继承层次过深,可能导致代码结构复杂,难以理解和维护。