2017-10-12 63 views
-2
public class A { 
public void method1{ 
    System.out.println("Method 1 called"); 
    } 
public void method2{ 
    System.out.println("Method 2 called"); 
    } 
} 
class B extends A { 
    B obj = new B(); 
    obj.method1();// should be present in scope 
    obj.method2();// should not be accessible.Should not be present in scope. 
} 
class C extends A { 
    C obj = new C(); 
    obj.method2(); // should be present in scope. 
    obj.method1(); // should not be accessible. Should not present in scope. 
} 

說明:考慮上面的例子,其中A是超類,B,C類是子類。java中的繼承方法可見性概念

是他們的任何適當的程序,通過它我們可以實現如下:

  1. 子類B必須能夠訪問方法1()只而不是方法2()。
  2. 子類C必須能夠訪問method2()而不是method1()。

謝謝

+5

不,這沒有意義。 – jonrsharpe

+0

您能否詳細說明一下? –

+3

那麼爲什麼*會*同一超類的兩個子類看到不同的東西?如果他們應該繼承不同的東西,他們應該從*不同的超類繼承他們。我懷疑是一個http://xyproblem.info。 – jonrsharpe

回答

1

是他們的任何適當的程序,通過它我們可以實現如下: 子類B必須能夠訪問方法1()只而不是方法2()。 子類C必須能夠訪問method2()而不是method1()。

這是不可能的,因爲如果你想防止繼承一個成員,你可以將它設置爲private

但是,一旦將其設置爲私有,B子類和C子類都不能繼承該成員。

+2

從技術上講,如果你製作了一些私有包,並且在同一個包中聲明瞭一個子類而另一個不是,你可以使可見性不同,但這仍然不能實現OP所談論的內容。 – azurefrog