java中的类型(动态绑定)

java中的类型(动态绑定),java,dynamic,binding,Java,Dynamic,Binding,蔬菜类 public class Vegetable { public void cook() { System.out.println("cook veg"); } public static void eat(Vegetable veg) { System.out.println("eat veg"); } public static void eat(Bean bean) { System.out.prin

蔬菜类

  public class Vegetable {
     public void cook() {
     System.out.println("cook veg");
     }
     public static void eat(Vegetable veg) {
     System.out.println("eat veg");
     }
     public static void eat(Bean bean) {
     System.out.println("eat bean");
     }
     public void pick(Vegetable veg) {
     System.out.println("pick 1");
     }
 public void pick(Bean bean) {
 System.out.println("pick 2");
 }
} // end class Vegetable
豆类

public class Bean extends Vegetable {
 public void cook() {
 System.out.println("cook bean");
 }
 public String name() {
 return "bean";
 }
} // end class Bean
扁豆类

public class Lentil extends Bean {
 public String name() {
 return super.name()+" lentil";
 }
 public void pick(Vegetable veg) {
 System.out.println("pick 3");
 }
} // end class Lentil
测试班

public class Test{
    public static void main(String[] args){
    Vegetable v = new Vegetable();
    Bean b = new Bean();
    Lentil len = new Lentil();
    Vegetable vb = new Bean();
    System.out.println(v.pick(len));
    System.out.println(b.pick(len));
    System.out.println(len.pick(len));
    System.out.println(Vegetable.eat(len));
    }
}

我真的不明白这些为什么有用。例如v.picklen。len被声明为小扁豆,属于小扁豆类型。那么,如果没有需要小扁豆的函数,这将如何工作呢?所有其他函数也是如此,我真的不明白lentl是如何工作的。

lentl扩展了Bean,还有一个函数需要一个Bean。蔬菜也是一样。而且,这不是动态绑定。但即使它扩展了bean,也没有声明为bean。它不需要声明为bean才能工作吗?在你的主方法中什么是vblen?哦,对不起,忘了这个。把它加进去!