AP CS Practice - OOP

时间:2012-02-10 15:46:42

标签: java oop class inheritance interface

我在AP CS,并试图弄清楚这是否有效。

public interface Controller
public class Widget implements Controller
public class Thingy extends Widget

Controller myControl = new Thingy();

假设顶部的接口/类实际定义。第四行(Controller myControl = new Thingy();)是否有效,或者你不能从这样的界面创建一个对象?

3 个答案:

答案 0 :(得分:2)

你可以。

在这种情况下,您将实例化Thingy的实例,这是一个具体的类。您刚刚将其声明为Controller类型。这只意味着使用它的任何东西都只能访问接口Controller中可用的方法(除非它们是向下转换,使用反射等)。这是一种很好的做法,因为它允许您交换myControl的实际实现,并且对象的用户不关心。

答案 1 :(得分:1)

这是多态性和继承的基础 - 你应该生活和完全理解OOP的两个术语。

考虑一下:

你有一个Car界面,一个实现Car的SportsCar对象和一个扩展SportsCar的Porsche对象。

SportsCar IS-A Car所以你可以说:Car myCar = new SportsCar(); 保时捷IS-A SportsCar,您可以说:SportsCar myCar = new Porsche();

出于同样的原因,保时捷IS-A Car让你可以肯定地说:

Car myCar = new Porsche();

底线是:超类(接口,抽象类或其他)可以保存对其子类的引用。

答案 2 :(得分:0)

这将创建类 Thingy 的实例,该实例实现 Controller Controller 接口本身无法实例化。