2013-03-24 115 views
1
class superClass {} 

class subClass extends superClass{} 

public class test 
{ 

    public static void main() 

{ 

    superClass sc1 = new subClass(); 
    subClass sc2 = new subClass(); 
    //whats the difference between the two objects created using the above code? 

} 
} 
+0

的[什麼意思「計劃可能重複到一個接口「?](http://stackoverflow.com/questions/383947/what-does-it-mean-to-program-to-an-interface) – Raedwald 2014-06-14 10:38:41

回答

5

簡單的解釋: 當您使用SuperClass中定義的

SuperClass obj = new SubClass(); 

只有公有方法可以訪問。​​中定義的方法不是。

當您使用​​定義

SubClass obj = new SubClass(); 

公開方法也與SuperClass恥骨方法一起使用。

在兩種情況下創建的對象都是相同的。

例:

public class SuperClass { 

    public void method1(){ 

    } 
} 

public class SubClass extends SuperClass { 
    public void method2() 
    { 

    } 
} 

SubClass sub = new SubClass(); 
sub.method1(); //Valid through inheritance from SuperClass 
sub.method2(); // Valid 

SuperClass superClass = new SubClass(); 
superClass.method1(); 
superClass.method2(); // Compilation Error since Reference is of SuperClass so only SuperClass methods are accessible. 
1

對象是一樣的。但是,因爲sc1被聲明爲superClass類型,所以不能在其上使用subClass方法而不投射。

2

使用上面的代碼創建的兩個對象之間的區別是什麼?

這兩個對象是完全一樣的。與存儲對象引用的變量的類型不同的是。實際上,這意味着如果有任何針對subClass的方法,您將可以通過sc2訪問它們,但不能通過sc1(後者需要投射)訪問它們。

2

在這兩種情況下,subClass對象將被創建,但引用會有所不同。

隨着superClasssc1參考,您將無法調用存在於subClass但不是在superClass方法。您將需要投射以調用subClass方法。

像:現在

class superClass { 
    public void superClassMethod(){ 
    } 
} 

class subClass extends superClass{ 
    public void subClassMethod(){ 
    } 
} 

public class test 
{ 
    public static void main(){ 

    superClass sc1 = new subClass(); 
    subClass sc2 = new subClass(); 
    //whats the difference between the two objects created using the above code? 


    sc2.subClassMethod(); //this is valid 

    sc1.subClassMethod(); // this is a compiler error, 
          // as no method named subClassMethod 
          // is present in the superClass as the 
          // reference is of superClass type 

    // for this you require a type cast 

    (subClass)sc1.subClassMethod(); // Now this is valid 

    } 
} 
0

只是覺得這樣的。 當您使用父級(超類)引用時,您將只能訪問父級擁有的事物(變量,方法)。但是如果你使用孩子的引用,你會得到父母和孩子所擁有的一切(孩子從父母繼承的屬性)。

0

除了上述的答案,因爲構造的對象是真的類型​​,你可以將它轉換爲​​和調用的方法的對象:

SuperClass superClass = new SubClass(); 
superClass.method1(); 
((SubClass)superClass).method2(); 
相關問題