欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

21、继承复习

程序员文章站 2022-04-30 15:32:40
...

此次笔记主要我小案例分析笔记

接口Skill

/**
 * 技能
 */
interface Skill {
    void dance();//跳舞
}

超类Person,超类有name属性和hello方法

/**
 * 人类
 */
class Person {
    String name;//姓名

    public Person(String name) {
        this.name = name;
    }

    void hello() {
        System.out.println("你好啊" + name);
    }
}

派生类1、student,学生类继承Person类,则属性name和helle()方法也一并继承,但是学生类同样有自己派生的属性classname以及方法study();
学生类通过super关键字调用父类构造器对name进行赋值,而student构造器则同时可以为classname赋值,在学生类的方法中调用父类的属性和方法全部是通过super关键字执行的;

/**
 * 学生类
 */
class Student extends Person implements Skill {

    String className;//班级名


    public Student(String name, String className) {
        super(name);
        this.className = className;
    }

    @Override
    void hello() {
        System.out.println("你好....." + super.name);
    }


    public void study() {
        System.out.println(className + "班的" + super.name + "在学习");
    }

    @Override
    public void dance() {
        System.out.println(className + "班的" + super.name + "在跳disco");

    }
}

派生类2、teacher

/**
 * 老师
 */
class Teacher extends Person implements Skill {

    String subject;//科目

    public Teacher(String name, String subject) {
        super(name);
        this.subject = subject;
    }

    @Override
    void hello() {
        System.out.println("你好啊" + this.subject + "老师");
    }

    void teach() {
        System.out.println(this.subject + "老师" + super.name + "在教书");
    }

    @Override
    public void dance() {
        System.out.println(this.subject + "老师" + super.name + "在跳教学舞");
    }
}

测试类Test

public Test{
 public static void main(String[] args) {
       
        Skill s1 = new Student("李白", "三年二班");
        s1.dance();

        Skill s2 = new Teacher("杜甫", "语文");
        s2.dance();
    }
}

执行结果

三年二班的李白在跳disco
语文老师杜甫在跳教学舞

总结:
1、子类调动父类属性和方法通过super关键字
2、子类存在父类非private同名方法,当向上造型时,调用此方法则会调用子类的重写方法。
3、接口不能实例化,实例化对象必须是具体实现此接口的实现类
4、抽象类不能实例化

相关标签: 知识总结