0

スーパークラスのメソッドは、Javaのすべてのサブクラスで機能します。サブクラスに独自の独立したメソッドがある場合、どうすれば機能させることができますか。

class  Polymorphism3 {

 public static void main(String[] args) {
            // note how these are all considered objects of type Animal by Java
            Animal[] a = new Animal[4];
            a[0] = new Mouse();
            a[1] = new Bird();
            a[2] = new Horse();
            a[3] = new Animal();            
            for (int i=0;i<4;i++) {
                a[i].pullTail();                
            }           

//...       


class Animal {
    public void pullTail() {
        System.out.println("I don't know what to say.");
    }
}

class Mouse extends Animal {
    public void pullTail() {
        System.out.println("fart");
    }
}

class Bird extends Animal {
    public void pullTail() {
        System.out.println("tweet");
    }

    public void fly() {
        System.out.println("flap");
    }
}

class Horse extends Animal {
    public void pullTail() {
        System.out.println("neigh");
    }
}
4

2 に答える 2

1

動物で宣言されていない場合、それを機能させることはできません。
唯一の方法は、動物を鳥にキャストすることです。

((Bird)a [1])。fly();

BirdのputTailの実装から呼び出すこともできます。

于 2013-03-02T00:16:46.620 に答える
1

これがネストされたクラスをインスタンス化できないことに関する場合:そのためにそれを囲むクラスのオブジェクトが必要です:

public class Polymorphism3 {
    public static void main(String[] args) {
        // note how these are all considered objects of type Animal by Java
        Animal[] a = new Animal[4];
        Polymorphism3 poly = new Polymorphism3();
        a[0] = poly.new Mouse();
        a[1] = poly.new Bird();
        a[2] = poly.new Horse();
        a[3] = poly.new Animal();
        for (int i = 0; i < 4; i++) {
            a[i].pullTail();
        }
    }

    class Animal {
        public void pullTail() {
            System.out.println("I don't know what to say.");
        }
    }

    class Mouse extends Animal {
        public void pullTail() {
            System.out.println("fart");
        }
    }

    class Bird extends Animal {
        public void pullTail() {
            System.out.println("tweet");
        }

        public void fly() {
            System.out.println("flap");
        }
    }

    class Horse extends Animal {
        public void pullTail() {
            System.out.println("neigh");
        }
    }
}
于 2013-03-02T00:25:28.603 に答える