2016-04-10 7 views
0

Klasse1は、抽象クラスであり、foo()メソッドを持っています。 Klasse2Klasse1を拡張し、doo()メソッドを持ちますが、foo()メソッドを上書きしません。インスタンスを抽象的に拡張して作成する

Testerクラスでdoo()メソッドを呼び出すことができないのはなぜですか?コンパイル時に

Klasse1.java

public abstract class Klasse1 { 
    public void foo() { 
     System.out.println("Klasse1"); 
    } 
} 

Klasse2.java

public class Klasse2 extends Klasse1 { 
    public void doo() { 
     System.out.println("Klasse2"); 
    } 
} 

Tester.java

public class Tester { 
    public static void main(String[] args) { 
     Klasse1 k; 
     k = new Klasse2(); 
     k.foo(); 
     k.doo(); // doesn't work 
    } 
} 
+2

'Klasse1'は' troo' – Rehman

+1

@Rehmanを持っているdoesntののでできます/ – schwobaseggl

+0

Klasse1場合はその時点で、あなただけの何Klasse1を知っているので、あなたは、参照型を持っている '斗()' –

答えて

2

Javaコンパイラは、インスタンス型ではなく参照型をチェックします。

この場合、参照タイプはKlasse1であり、doo()ではありません。したがって、エラーが発生します。

1

Klasse1にはdooというメソッドがありませんので、自然です。

あなたのKlasse2にそれをキャストし、このようにそれを使用することができます:Klasse1

KKlasse1が宣言されたすべてのメソッドを呼び出すことができるよう

((Klasse2)k).doo(); 
0

Kは、クラスKlasse2の対象であるが、参照そのクラスにキャストされている場合は、Klasse2が宣言したすべてのメソッドを呼び出すことができます。

例:

public class Tester { 
    public static void main(String[] args) { 
     Klasse1 k; 
     k = new Klasse2(); 
     k.foo(); 
     ((Klasse2)k).doo(); // now works 
    } 
} 
+0

ありがとう!これは私の問題を解決しました! –

関連する問題