2014-02-19 45 views
-2

我問的問題是你可以有以下幾點。超級是超類的子的子類如何與超類進行交互

super thing = new sub(); 

,然後調用從子類中的方法

+6

請閱讀有關類和繼承的基本Java教程。 –

+0

母類方法在子類中可用,只要方法不是「私有」 – Kwoinkwoin

+0

那不是我要求的 – user3328784

回答

2
class A 
{ 
    public void foo() { System.out.println("foo"); } 
    public void baz() { System.out.println("baz"); } 
} 

class B extends A 
{ 
    public void foo() { System.out.println("fizz"); } 
    public void bar() { System.out.println("bar"); } 
} 

public class Program 
{ 
    public static void main(String[] args) 
    { 
     A obj1 = new A(); 
     A obj2 = new B(); 
     obj1.foo(); // prints "foo" 
     obj1.baz(); // prints "baz" 

     obj2.foo(); // prints "fizz" 
     obj2.baz(); // prints "baz" 
     obj2.bar(); // compile error 

     ((B)obj2).bar(); // prints "bar" 
     ((B)obj1).bar(); // runtime error 
    } 
} 

正如你可以看到,初始化爲BA類型的對象將調用以任何覆蓋方法B,但B方法不能被看到。未覆蓋的方法將使用超類中的版本。

你可以蒙上類更具體的(聲明爲超類的子類類型的對象)的東西,但如果對象是不實際上的更具體的類型的實例,你會得到一個ClassCastException在運行時。

+0

這是好的,但我-think-的OP實際上是尋找一個上溯造型的例子。他有A,他想從B調用一個方法。 – Gimby

+0

@Gimby,這不會是倒立,這將是正常的類型轉換。不過,我會將其添加到我的答案中。 –