我在AP CS中,正在尝试弄清楚这是否有效。
public interface Controller
public class Widget implements Controller
public class Thingy extends Widget
Controller myControl = new Thingy();
假设在顶部的接口/类是实际定义的。第四行(Controller myControl = new Thingy();
)可以工作吗?或者您不能从这样的接口创建对象吗?
发布于 2012-02-10 23:50:02
你可以的。
在本例中,您正在实例化Thingy
的一个实例,它是一个具体的类。您刚刚将其声明为Controller
类型。这只是意味着使用它的任何东西都只能访问接口Controller
中可用的方法(除非它们向下转换,使用反射等)。这是一个很好的实践,因为它允许您替换myControl
的实际实现,而对象的用户不会关心。
发布于 2012-02-11 00:02:41
它是多态性和继承的基础--这两个术语是你应该充分理解OOP的。
请考虑以下内容:
您有一个Car接口、一个实现Car的SportsCar对象和一个扩展SportsCar的Porsche对象。
保时捷是一辆车所以你可以说:Car myCar = new SportsCar();
SportsCar IS-A SportsCar所以你可以说:SportsCar myCar = new Porsche();
出于同样的原因,保时捷是一辆车,所以你可以明确地说:
Car myCar = new Porsche();
底线是:超类(接口、抽象类或其他类)可以包含对其子类的引用。
发布于 2017-09-10 02:41:26
这将创建Thingy类的一个实例,它实现了Controller。控制器接口本身不能实例化。
https://stackoverflow.com/questions/9230482
复制相似问题