继承和创建对象

时间:2015-09-13 22:28:56

标签: java object extends

假设Java中有以下类:

TeachingAssistant extends Graduate

我可以制作object Graduate并在TeachingAssistant中使用吗?实施例

TeachingAssistant TA1 = new TeachingAssistant();
Graduate grad1 = new Graduate();
grad1 = TA1; //can I do this?
TA1 = grad1;// can I do this as well?

另外假设 A类扩展B并实现C 我可以在A中制作B和C的物体吗?

2 个答案:

答案 0 :(得分:3)

鉴于

class TeachingAssistant extends Graduate{}
class Graduate{}

总结了你能做什么/不能做什么(以及为什么)

TeachingAssistant t = new TeachingAssistant(); //OK
Graduate g = new Graduate(); //OK
Graduate gt = new TeachingAssistant(); //OK
TeachingAssistant tg1= new Graduate(); //Compile error: a Graduate is NOT ALWAYS a TeachingAssistant
TeachingAssistant tg2= (TeachingAssistant) new Graduate(); //Runtime error: as previous example
TeachingAssistant tg3= (TeachingAssistant)gt; //OK: gt is an object of type TeachingAssistant 
                                              //referenced by reference of type Graduate

答案 1 :(得分:0)

我相信你提到的一些概念。

构图与继承

  

另外假设A类扩展B并且实现C可以创建对象   A和B中的B和C

我打算假设C是你提到的关于实现它的接口。不,在A中实例化C是不可能的。可以将A中的对象B声明为类属性,但这种用例很少见,如果你这样做,你应该重新考虑你的设计解决方案。

<强>向上转型

grad1 = TA1; //can I do this?

是的,你可以这样做,但正确的语法应该是:

grad1 = (Graduate) TA1;

<强>向下转换

TA1 = grad1;// can I do this as well?

你不能这样做。这将导致编译错误。