-1

以下のAnimal クラスのコードでClimbTrees()メソッドを削除すると、エラーが発生するのはなぜですか

public class Refr1 
{
    public static void main(String[] args) 
    { 
      Animal objChimp = new Chimp();
      objChimp.ClimbTrees();     
    }
}


class Animal
{
    void ClimbTrees()
    {
     System.out.println("I am Animal Which Climb Tree");    
    }
}


class Chimp extends Animal 
{
    void ClimbTrees()
    {
        System.out.println("I am Chimp Which Climb Tree");  
    }
}

Animal クラスのClimbTrees()を削除すると、以下のエラーが表示されます

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The method ClimbTrees() is undefined for the type Animal
4

3 に答える 3

1
when I remove the ClimbTrees() Method why is it generating Error

インスタンスを使用してクラスobjChimp内のメソッドを呼び出すことができるからです。メソッドがクラスにないため、このエラーが発生していますAnimalClimbTrees()Animal

編集: オーバーライドとポリモーフィズムを学ぼうとしていると思います。詳細については、こちらをご覧ください。あなたの場合、以下は真です。以下の例でWHY要因を説明しているのではありません。調査のために残します。

// a. You can call only methods/variables is Animal class using objChimp instance
// b. If you are calling overridden methods, the method in Chimp class will be called in run time
Animal objChimp = new Chimp();

// a. You can call methods/variables both in Animal class and Chimp class using objChimp instance
// b. If you are calling overriden methods, the method in Chimp class will be called in runtime
Chimp objChimp = new Chimp();
于 2013-03-30T01:35:48.027 に答える
1

これはあなたが得るエラーです - メソッド ClimbTrees() はタイプ Animal に対して未定義です。なぜそれが起こるのですか?

コンパイラは objChimp の静的型をチェックします。動物です。objChimp の動的型は Chimp です。

コンパイラはまず、objChimp の静的型に ClimbTrees() というメソッドがあるかどうかを確認します。見つからない場合は、エラーがスローされます。ただし、メソッドを削除しないと、コンパイラは静的型を認識して ClimbTrees() を見つけます。それが見つかった場合にのみ、コードをコンパイルできます。実行時に、objChimp の動的タイプに ClimbTrees() も存在するかどうかがチェックされます。見つかった場合は、動物ではなくチンパンジーの ClimbTrees() を実行します。見つからない場合は、objChimp の静的型の ClimbTrees()、つまり Animal の ClimbTrees() を実行します (チンパンジーの登る木にコメントを付けて、何が起こるかを確認してください)。

ノート -

http://en.wikipedia.org/wiki/Type_system

于 2013-03-30T01:37:42.603 に答える
0

タイプobjChimpから宣言されているため、アクセスできる属性/メソッドのみを使用できます。子から特定の属性/メソッドを呼び出したい場合は、それをダウンキャストする必要があります。これにより、コードが機能する可能性があります(クラスからメソッドを削除したと仮定します):AnimalAnimalClimbTreesAnimal

Animal objChimp = new Chimp();
((Chimp)objChimp).ClimbTrees(); 

ただし、クラスを特定のクラスにダウンキャストできることを確認する必要があります。詳細については、Java でのダウンキャストを確認 してください。

于 2013-03-30T01:36:06.600 に答える