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?
}
}
1
A
回答
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
對象將被創建,但引用會有所不同。
隨着superClass
即sc1
參考,您將無法調用存在於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();
相關問題
- 1. SuperClass s = new SubClass();?
- 2. 「Can not cast」Subclass to Superclass
- 3. ArrayList char和subclass
- 4. subclass string.Formatter
- 5. Vue.js中的'subclass'是什麼意思?
- 6. Hibernate Table Per Subclass和NonUniqueObjectException
- 7. C#中new object()和new {}之間的區別是什麼?
- 8. AngularJS中的「Subclass」http和httProvider
- 9. 幫助Subclass屬性
- 10. Table-Per-SubClass not working
- 11. 「Parent c = new Child()」和「Child c = new Child()」之間有什麼區別?
- 12. Super thing = new Sub()和Sub thing = new Sub()之間有什麼區別?
- 13. TypeOf Subclass的設計模式
- 14. UIButton Subclass標題變化
- 15. Shape s = new Circle()之間的區別是什麼?和Shape * s = new Circle();
- 16. Subclass a Backbone.View子類和保留事件
- 17. Go中的new(Struct)和&Struct {}之間的區別是什麼?
- 18. (* T)(nil)和&T {}/new(T)之間的區別是什麼? Golang
- 19. 在OWL中混合EquivalentClass和SubClass
- 20. new XMLHttpRequest()vs new XMLHttpRequest - 有什麼區別?
- 21. new Thread(void Target())和new Thread(new ThreadStart(void Target()))有什麼區別?
- 22. Java:將Subclass Type作爲Main的參數
- 23. Objects.hashCode()和new Object()。hashCode()之間的區別?
- 24. ArrayListMultimap.create()和RowData = new ArrayList();之間的區別
- 25. String.valueOf()和new String()之間的區別
- 26. c.toArray(new String [size])和c.toArray(new String [] {})之間的區別
- 27. A * pA = new A之間的區別;和A * pA = new A();
- 28. Queue q = new LinkedList和LinkedList q = new LinkedList之間的區別?
- 29. object [] = object [] f = new object []和var f = new []之間的區別?
- 30. 如何初始化具有相同SuperClass方法的不同SubClass類型?
的[什麼意思「計劃可能重複到一個接口「?](http://stackoverflow.com/questions/383947/what-does-it-mean-to-program-to-an-interface) – Raedwald 2014-06-14 10:38:41