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、抽象类不能实例化