【Java】继承详解

为什么要使用继承?

在这里先写一个Person类

//人类
class Person{
    private String name;
    private int age ;
    //默认构造方法
    public String getPersonInfo(){
        return "姓名: "+this.name+"年龄: "+this.age;
    }
    //getXxx  setXxx
    public String getName(){
        return this.name;
    }
    public int getAge(){
        return this.age;
    }
    public void setName(String name){
        this.name = name;
    }
    public void setAge(int age){
        this.age = age;
    }
}

再来写一个学生类

//学生类
class Student {
    private String name;
    private int age ;
    private String studentNum;
    //构造方法
    public void setStudentNumber(String studentNum){
           this.studentNum=studentNum; 
    }
    public String getStudentInfo(){
        return "姓名: "+this.getName()+"年龄: "+this.getAge()+"学号: "+this.studentNum;
    }
    //getXxx  setXxx
    public String getName(){
        return this.name;
    }
    public int getAge(){
        return this.age;
    }
    public void setName(String name){
        this.name = name;
    }
    public void setAge(int age){
        this.age = age;
    }
    public String getStudentNumber(){
        return this.studentNum;
    }
}

我们可以看出上面两个类中重复的代码太多,这样大大浪费了我们的时间,为了减少这种结构定义上的重复,就要用到Java中一个非常重要的概念-----继承

通过分析可以发现,学生是人类的一个具体化,比人类的属性多了几条.也就是说,学生继承了人类的属性,对上面的两个类进行了继承.

继承具体实现语法

class 子类 extends 父类

//人类
class Person{
    private String name;
    private int age ;
    //默认构造方法
    public String getPersonInfo(){
        return "姓名: "+this.name+"年龄: "+this.age;
    }
    //getXxx  setXxx
    public String getName(){
        return this.name;
    }
    public int getAge(){
        return this.age;
    }
    public void setName(String name){
        this.name = name;
    }
    public void setAge(int age){
        this.age = age;
    }
}
//学生类继承人类
class Student extends Person {
    private String studentNum;//属性的扩充
    public String getStudentInfo(){
        return "姓名: "+this.getName()+"年龄: "+this.getAge()+"学号: "+this.studentNum;
    }
    public String getStudentNumber(){
        return this.studentNum;
    }
    public void setStudentNumber(String studentNum){
        this.studentNum=studentNum;
    }
}
//测试
public class Test1 {
    public static void main(String[] args){
        Person person1 =new Person();//实例化人类
        person1.setName("张三");
        person1.setAge(18);
        System.out.println(person1.getPersonInfo());

        Student student1 = new Student();//实例化学生类
        student1.setStudentNumber("2018");
        System.out.println(student1.getStudentInfo());
    }
}

在这里插入图片描述
继承的主要作用是对类进行扩充以及代码的重用

继承的限制

1.子类对象在进行实例化前一定会首先实例化父类对象.默认调用父类的构造方法后再调用子类构造方法进行子类对象初始化.
2.在Java中都是单继承,允许多层继承。
3.子类继承父类,能不能访问父类的属性取决于父类的访问控制符。
4.继承的主要作用是对类进行扩充以及代码的重用。

  • 在进行继承的时候,子类会继承父类的所有结构。(包含私有属性、构造方法、普通方法)但是这个时候需要注意的是,所有的非私有操作属于显示继承(可以直接调用),所有的私有操作属于隐式继承(通过其他形式调用,例如setter或getter)

覆写(override)

说到继承,我们就不得不说一下覆写
https://blog.csdn.net/baidu_41813368/article/details/84790605

super关键字

https://blog.csdn.net/baidu_41813368/article/details/84790667

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值