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 :(得分:5)
简单说明: 当你使用
SuperClass obj = new SubClass();
只能访问SuperClass
中定义的公共方法。 SubClass
中定义的方法不是。
使用时
SubClass obj = new SubClass();
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 :(得分:2)
使用上面的代码创建的两个对象之间的区别是什么?
这两个对象完全相同。不同的是存储对象引用的变量的类型。在实践中,这意味着如果有任何特定于subClass
的方法,您将能够通过sc2
访问它们,但不能通过sc1
访问它们(后者需要强制转换)。
答案 2 :(得分: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
}
}
答案 3 :(得分:1)
对象是一样的。但是,由于sc1
被声明为superClass
类型,因此您无法在不进行转换的情况下使用subClass
方法。
答案 4 :(得分:1)
除上述答案外,由于构造的对象实际上是SubClass
类型的对象,您可以将其强制转换为SubClass
并调用方法:
SuperClass superClass = new SubClass();
superClass.method1();
((SubClass)superClass).method2();
答案 5 :(得分:0)
就这样想。 当您使用父(超类)引用时,您将只能访问父项具有的内容(变量,方法)。但是如果你使用孩子的引用,你将获得父母和孩子所拥有的一切(孩子从父母那里继承属性)。