F x=new S();
父类引用,指向子类对象
声明空间是F类型的,但在堆中创建的却是S类型的
父类:F
子类:S
父类引用:x
作用:在多态参数中起作用多态关注的主要是方法,不关注属性
父类引用指向子类对象,子类要重写父类中相同的方法才有意义
package day12;
//多态的应用:
//需求:School 可以方法record,要求在record中可以调用到java讲师,python讲师的讲课方法。
class Teacher{
private String name;
private int age;
public void introduce(String content){
System.out.println("我的名字是"+this.name+"我上的课程是"+content);
}
public void teach(){
System.out.println("上课了");
}
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;
}
}
class JavaTeacher extends Teacher{
public void teach(){
super.teach();//在子类下可以通过super来调用父类下的方法。
System.out.println("打开eclipse");
System.out.println("上课...");
}
}
class PythonTeacher extends Teacher{
public void teach1(){
System.out.println("打开pycharm");
System.out.println("上课...");
}
}
class School{
// public void record(JavaTeacher j) {
// j.teach();
// }
// public void record(PythonTeacher p) {
// p.teach();
// }
// public void record(PythonTeacher p,JavaTeacher j) {
// p.teach();
// j.teach();
// }
public void record(Teacher teacher) {
//Teacher teacher = new JavaTeacher();
//Teacher teacher = new PythonTeacher();
teacher.teach();
}
}
public class 复习 {
public static void main(String[] args) {
JavaTeacher java=new JavaTeacher();
PythonTeacher python=new PythonTeacher();
School s=new School();
s.record(java);
s.record(python);
}
}