首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"ParentClass objectName1= SubClass()“和"SubClass objectName2 = new SubClass()”之间有什么区别?

"ParentClass objectName1= SubClass()“和"SubClass objectName2 = new SubClass()”之间有什么区别?
EN

Stack Overflow用户
提问于 2014-06-14 10:14:28
回答 5查看 717关注 0票数 2

我想知道在从另一个类扩展的类中创建对象的这两种方法之间是否存在功能上的区别。

我只是在处理基本的继承问题,除了猫以外,没有什么比猫更复杂的东西可以扩展哺乳动物之类的东西。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-06-14 10:26:59

ParentClass objectName = new SubClass() -父类引用持有子类对象。

代码语言:javascript
复制
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

}
}
票数 3
EN

Stack Overflow用户

发布于 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或其后代)。
票数 3
EN

Stack Overflow用户

发布于 2014-06-14 10:27:12

new SubClass()返回的实例不受您分配给它的引用类型的影响--运行相同的构造函数,然后返回一个具有相同功能的对象。

将这个新创建的对象分配给层次结构中的高级引用通常是用来表示您不会使用任何特定于SubClass的方法,并且您的代码并不与假定您正在使用的子类相关联。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24218852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档