2016-12-02 12 views
0

親クラスから子クラスメソッドにアクセスできますか?Java:親クラスから子クラスメソッドにアクセス

public class C1 { 
    public C1(){ 
     System.out.println("Constructor C1"); 
    } 
} 

public class C2 extends C1{ 
    public void m1(){ 
     System.out.println("print from m1"); 
    } 
} 

public class C3 extends C1{ 
    public void m2(){ 
     System.out.println("print from m2"); 
    } 
} 

public class TestMain{ 
    public static void main(String[] args){ 
     C1 c1 = new C1(); 
    } 
} 

は、子クラスの初期化せずにアクセスc1.m1()& c1.m2()にとにかくありますか?

+0

「super」を使用していますか?すなわち、 'c2.m1()'でsuper.m1()を呼び出すと、c2の親で自動的に 'm1()'が呼び出されます。 [関連](http://stackoverflow.com/questions/3767365/super-in-java) –

+1

できません。この場合、C2とC3の両方が 'm3()'メソッドを定義していれば、 'c1.m3()'を呼び出すときにどのメソッドを呼び出すべきですか? 'C2.m3()'または 'C3.m3'? – diufanman

答えて

1

いいえありません:c1は、タイプC1のオブジェクトを参照する参照です。 Javaをだまして、それがC2またはC3だと考えるように変換することはできません。

何が通常はどうなることは多形は、子クラスで機能を実装し、

C1 c = new C2();

c.mSomething()のようなものを使用し、C1abstract機能mSomethingを定義することで、その後呼ぶだろう、、子クラスで必要な機能

もう1つの方法は、m1m2staticをパラメータにして、C1インスタンスをパラメータにすることです。

+0

ありがとう@Bathsheba。私はいくつかの代替案を探していました。この目的は、メソッドを3つの異なるクラスに論理的に分離し、すべてを同じポイントから呼び出すことです。実行可能に見えません。 :( –

+0

最後に別のアプローチを追加しました。 – Bathsheba

+0

はい、それは私の目的を解決しません!:( –

関連する問題