假设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的物体吗?
答案 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?
你不能这样做。这将导致编译错误。