由于doThings方法中顺次有两个方法,而这两个方法都是抽象类和子类中所含有的,所以没办法实现单独调用其一的效果.
解决办法只能是使用多态分开来调用.
abstract class Student {
public abstract void study();
public void sleep() {
System.out.println("睡觉");
}
}
class DoStudent {
public void doThings(Student x) {
x.study();
x.sleep();
}
}
class BasStudent extends Student {
public void study() {
System.out.println("BAS Study");
}
public void sleep() {
System.out.println("BAS Sleep");
}
}
class AdvStudent extends Student {
public void study() {
System.out.println("ADV Study");
}
public void sleep() {
System.out.println("ADV Sleep");
}
}
class DuoTaiDemo3_1 {
public static void main(String[] args) {
/*
* 以下这种写法没有办法调用其中之一的方法,因为doThings方法中顺序调用了两个方法study()、sleep()
*/
DoStudent dt = new DoStudent();
dt.doThings(new BasStudent());
dt.doThings(new AdvStudent());
/*
* 解决方案是要么将doThings方法拆成两个,要么直接在main函数中使用多态分两次调用子类中的方法
*/
Student bs = new BasStudent();
bs.study();
bs.sleep();
Student as = new AdvStudent();
as.study();
as.sleep();
}
} |