JAvaマルチステートとダイナミックバインド

3886 ワード

  • javaの継承にはキーワードextendsが使用されます.たとえばclass B extends A{...}はクラスB継承クラスAを表す.
  • javaマルチステートには、継承、書き換え、親変数参照の3つの必要条件があります.マルチステート方式でメソッドを呼び出す場合:a.まず親クラスにメソッドがあるかどうかを確認し、ない場合はコンパイルエラー;ある場合は、サブクラスがメソッドを上書きしているかどうかを確認します.b.サブクラスがメソッドを上書きした場合、サブクラスのメソッドが呼び出され、そうでなければ親メソッドが呼び出されます.
  • 静的バインディング(static binding)メソッドの修飾子がprivate、static、final、または構築メソッドである場合、コンパイラは、この呼び出しメソッドを静的バインディングと呼ぶべきメソッドを正確に知ることができる.
  • サンプルコード:
  • package j02_polymorphism;
    
    public class j02_main_poly {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            System.out.println("j02_main_polymorphism RUN...");
            Master me = new Master();
            me.feed(new Animal(), new Food());
            me.feed(new Cat(), new Fish());
            me.feed(new Dog(), new Bone());
    
        }
    
    }
    
    class Animal{
        public void eat(Food f){
            System.out.println("     ,   " + f.getFood());
        }
    }
    
    class Cat extends Animal{
        public void eat(Food f){
            System.out.println("cat eat " + f.getFood());
        }
    }
    
    class Dog extends Animal{
        public void eat(Food f){
            System.out.println("Dog eat " + f.getFood());
        }
    }
    
    
    class Food{
        public String getFood(){
            return "food1";
        }
    }
    
    class Fish extends Food{
        public String getFood(){
            return "fish_food";
        }
    }
    
    class Bone extends Food{
        public String getFood(){
            return "Bone_food";
        }
    }
    
    class Master{
        public void feed(Animal an, Food f){
            an.eat(f);
        }
    }