Java初识继承

继承


概念:在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中没有多继承,只能单继承,但是可以用实现接口的方式进行“多继承”。

继承中变量的访问特点

在子类方法中访问一个变量,最先在子类局部范围找,如果没有就在子类成员范围找,最后在父类成员范围找,如果都没有就报错。

继承中方法的访问特点

通过子类对象访问一个方法,先子类成员范围找,如果找不到就在父类成员范围找,如果都没有就报错。

继承的优缺点

优点:

  • 代码重用:可以通过继承现有类的属性和行为,避免重复编写代码,提高代码复用性。
  • 可扩展性:可以通过添加新的方法和属性来扩展现有类的功能,使代码更加灵活。

缺点:

  • 继承具有较强的耦合性:子类和父类之间有较强的关联性,一旦父类发生变化,子类也需要相应地修改,增加了维护的难度。
    现有类的属性和行为,避免重复编写代码,提高代码复用性。
  • 可扩展性:可以通过添加新的方法和属性来扩展现有类的功能,使代码更加灵活。

缺点:

  • 继承具有较强的耦合性:子类和父类之间有较强的关联性,一旦父类发生变化,子类也需要相应地修改,增加了维护的难度。
  • 继承层次过深可能导致复杂性增加:如果继承层次过深,可能导致代码结构复杂,难以理解和维护。
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值