一、抽象
1.抽象:使用abstract声明的类叫作抽象类,当父类的某些方法不确定,就可以用抽象类。
(1)抽象类是一种模板,不能被实例化;
(2)子类继承抽象类,如果子类不是抽象类,就要实现基类中全部的抽象方法;如果子类是抽象类,可以不用写抽象方法、也可以重写抽象方法;
2.抽象类和接口的区别
(1)抽象方法是抽象类里边的;
(2)抽象方法是相对接口而言的,接口必须实现基类中的全部方法,抽象类只实现抽象方法,不用实现普通方法
二、多态
1.多态:同一种行为,在子类中有有不同的体现。多态分为运行时多态和编译时多态。
2.实现多态需要做的3件事:
(1)继承
(2)重写
(3)父类的引用指向子类的对象;
例:父类 Person 子类 Student,可以这样定义 Person p = new Student();
三、代码(抽象+多态)
1.基类
public abstract class Teacher {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public abstract void teacherLession();
public void sleep() {
System.out.println(getName()+"正在睡觉");
}
}
2.抽象类
//javateacher
public class JavaTeacher extends Teacher {
@Override
public void teacherLession() {
System.out.println(getName()+"正在讲Java");
}
}
//
PHPTeacher
public class PHPTeacher extends Teacher {
@Override
public void teacherLession() {
System.out.println(getName()+"正在讲PHP");
}
}
//leader
public class Leader {
public void checkTeacher(Teacher t){
System.out.println("听课开始");
t.teacherLession();
System.out.println("听课结束");
}
}
3.测试
public class testAbstract {
public static void main(String[] args) {
Teacher jt=new JavaTeacher();
jt.setName("Java老师");
Leader l=new Leader();
l.checkTeacher(jt);
}
}