public class Minduck extends duck{
public void Minduck(){
flybehavior = new FlyWithWings();
}
}
public static void main(String[] args) {
duck minduck=new Minduck()
minduck.performFly();
}public abstract class duck(){
Flybehavior flybehavior;
public void performFly(){
flybehavior.fly();
}
}
public interface Flybehavior{ public void fly(){
}
}
public class FlyWithWings immplements Flybehavior{ public void fly(){
}
}public class FlyNOWithWings immplements Flybehavior{ public void fly(){
}
}
有几个问题不理解
第一、flybehavior = new FlyWithWings(); 接口不是不可以实例化吗?
第二、flybehavior是接口,而FlyWithWings是实现接口的类,flybehavior = new FlyWithWings()可以这样用吗
第三、在minduck中调用父类duck的 public void performFly(){
flybehavior.fly();
} ,其怎样知道是调用的FlyWithWings而不是FlyNOWithWings?
public void Minduck(){
flybehavior = new FlyWithWings();
}
}
public static void main(String[] args) {
duck minduck=new Minduck()
minduck.performFly();
}public abstract class duck(){
Flybehavior flybehavior;
public void performFly(){
flybehavior.fly();
}
}
public interface Flybehavior{ public void fly(){
}
}
public class FlyWithWings immplements Flybehavior{ public void fly(){
}
}public class FlyNOWithWings immplements Flybehavior{ public void fly(){
}
}
有几个问题不理解
第一、flybehavior = new FlyWithWings(); 接口不是不可以实例化吗?
第二、flybehavior是接口,而FlyWithWings是实现接口的类,flybehavior = new FlyWithWings()可以这样用吗
第三、在minduck中调用父类duck的 public void performFly(){
flybehavior.fly();
} ,其怎样知道是调用的FlyWithWings而不是FlyNOWithWings?
类似于 List list=new ArrayList();第二:同上,可以.第三:performFly()方法中调用的是 flybehavior.fly(); 而flybehavior这个接口类型指向的接口实现类的实例是new FlyWithWings(); 所以调用的是FlyWithWings父类或者接口的引用指向子类或者接口的实现类,这就是多态的本质。
而在duck调用的接口方法flybehavior.fly,这怎样理解
是不是在duck中声明的是变量flybehavior,而由于子类Minduck全部继承了duck的flybehavior变量,
并把他指向flybehavior = new FlyWithWings();(实例化)
是不是在duck中声明的是方法performFly,而由于子类Minduck全部继承了duck的performFly方法,
然后此时minduck.performFly();实际上在performFly()方法中是调用的FlyWithWings,这样理解对吗?