我想知道在从另一个类扩展的类中创建对象的这两种方法之间是否存在功能上的区别。
我只是在处理基本的继承问题,除了猫以外,没有什么比猫更复杂的东西可以扩展哺乳动物之类的东西。
发布于 2014-06-14 10:26:59
ParentClass objectName = new SubClass() -父类引用持有子类对象。
class ParentClass{
void m1(){
System.out.println("parent m1");
}
void m2(){
System.out.println("parent m2");
}
}
class SubClass extends ParentClass{
//subclass overriding parent class m1 method
@Override
void m1(){
System.out.println("child m1");
}
void m3(){
System.out.println("child m3");
}
}
class Test{
public static void main(String[] args){
ParentClass p = new SubClass();
p.m1();// out puts child m1 as child class is overriding m1 method
p.m2();//out puts parent m2 as child class is not overriding m2 method
p.m3();//gives compile time error as parent class reference doesn't know about m3 method
}
}发布于 2014-06-14 10:32:03
这取决于你想做什么:
ParentClass的特性而不关心实际的实现SubClass时,通常使用SubClass。一个突出的例子是像List这样的容器,人们经常这样做,例如List<String> objectName = new ArrayList<String>()。我们需要的是一个列表,而在代码的其余部分,通常并不关心列表是如何实现的。在您的情况下,如果您所需要的只是Mammal的特性,那么您可以使用它,您的代码也会在您想要在Dog而不是Cat中使用它的那一天工作。本着泛化的精神,您可以始终尝试使用最通用的类型(可以说是最古老的祖先)。一些集成开发环境实际上具有一个函数,可以尝试用最一般的类型替换变量类型,而这不会破坏代码。SubClass objectName = new SubClass()允许您在代码的其余部分中使用SubClass的所有细节,而不必执行任何类型的强制转换(对于上一种情况,原则上可能失败,如果代码的某些部分分配了一个不同的对象,而该对象不是SubClass或其后代)。发布于 2014-06-14 10:27:12
new SubClass()返回的实例不受您分配给它的引用类型的影响--运行相同的构造函数,然后返回一个具有相同功能的对象。
将这个新创建的对象分配给层次结构中的高级引用通常是用来表示您不会使用任何特定于SubClass的方法,并且您的代码并不与假定您正在使用的子类相关联。
https://stackoverflow.com/questions/24218852
复制相似问题