通过 继承抽象类 对 多态和继承 进行总结

继承抽象类:

            父类:
                  

            子类:

首先需要明确的第一点,抽象类不能被实例化,通过子类继承父类来获取父类的属性和方法,继承一个抽象类,需要重写所有抽象方法,接口同理。

 

(1)继承: 首先创建People类,并定义name,age,sex,sn属性

复制代码
public class People {
    public String name; // 姓名
    public int age; // 年龄
    public String sex; // 性别
    public String sn; // 身份证号
    public People(String name, int age, String sex, String sn) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.sn = sn;
    }
    public String toString() {
        return "姓名:" + name + "\n年龄:" + age + "\n性别:" + sex + "\n身份证号:" + sn;
    }
}
复制代码

           其次创建一个Student类继承People类

           引申 super() 类似于this(),super()指向父类,this()指向当前对象

复制代码
public class Student extends People {
    private String stuNo; // 学号
    private String department; // 所学专业
    public Student(String name, int age, String sex, String sn, String stuno, String department) {
        super(name, age, sex, sn); // 调用父类中的构造方法
        this.stuNo = stuno;
        this.department = department;
    }
    public String toString() {
        return "姓名:" + name + "\n年龄:" + age + "\n性别:" + sex + "\n身份证号:" + sn + "\n学号:" + stuNo + "\n所学专业:" + department;
    }
}
复制代码

由于 Student 类继承自 People 类,因此,在 Student 类中同样具有 People 类的属性和方法,这里重写了父类中的 toString() 方法。

注意:如果在父类中存在有参的构造方法而并没有重载无参的构造方法,那么在子类中必须含有有参的构造方法,因为如果在子类中不含有构造方法,默认会调用父类中无参的构造方法,而在父类中并没有无参的构造方法,因此会出错。

 

(2)多态:必须通过抽象类和接口实现,本质上就是通过抽象类和接口实现共性抽取,其次需要父类引用指向子类。例:一般在创建List对象的时候会采用 List list =  new LinkedList<>(); 等方式,实际上List是一个接口(interface),而LinkedList实现(implements)了List所有方法,所以list在new出来的时候类型是List,实际上指向的却是子类(LinkList)。而上述这种生成父类引用的方式称为“向上转型”,而父类引用若想调用子类的方法,则需要“向下转型”,也就是  LinkedList linkedList  =(LinkedList)list

共性抽取的好处则就体现在:List list = new ArrayList<>(); 既可以通过LinkedList来实现List接口,也可以通过ArrayList等子类来实现

这样做的好处:因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特, 定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。 所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法, 父类引用是无法调用的

 

 

 

 部分摘自:    http://c.biancheng.net/view/6398.html

本文作者:YoProgrammer

本文链接:https://www.cnblogs.com/sakanayo/p/16255736.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   YoProgrammer  阅读(79)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
No audio
00:00 / 00:00