Java AP CS实践-面向对象

Java AP CS实践-面向对象,java,oop,class,inheritance,interface,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=newthingy();)可以工作吗,还是不能从这样的界面创建对象?可以 在本例中,您

我在AP CS,我正在努力弄清楚这是否有效

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

Controller myControl = new Thingy();
假设顶部的接口/类实际上已定义。第四行(
Controller myControl=newthingy();
)可以工作吗,还是不能从这样的界面创建对象?

可以

在本例中,您正在实例化
Thingy
的一个实例,它是一个具体的类。您刚刚将其声明为type
Controller
。这意味着任何使用它的东西只能访问接口
控制器
中可用的方法(除非它们向下转换,使用反射等)。这是一个很好的实践,因为它允许您交换myControl的实际实现,而对象的用户不会在意。

您可以


在本例中,您正在实例化
Thingy
的一个实例,它是一个具体的类。您刚刚将其声明为type
Controller
。这意味着任何使用它的东西只能访问接口
控制器
中可用的方法(除非它们向下转换,使用反射等)。这是一个很好的实践,因为它允许您交换myControl的实际实现,而对象的用户不会在意。

这是多态性和继承的基础,这两个术语是您完全理解OOP所需要的

考虑这一点:

您有一个汽车界面、一个实现汽车的跑车对象和一个扩展跑车的保时捷对象

跑车是一辆车,所以你可以说:
carmycar=newsportscar()
保时捷是一款跑车,所以你可以说:
SportsCar myCar=新款保时捷()

出于同样的原因,保时捷是一辆汽车,因此你可以肯定地说:

Car myCar = new Porsche();

底线是:一个超类(接口、抽象类或任何东西)可以包含对其子类的引用。

这是多态性和继承的基础——这两个术语是完全理解OOP所需要的

考虑这一点:

您有一个汽车界面、一个实现汽车的跑车对象和一个扩展跑车的保时捷对象

跑车是一辆车,所以你可以说:
carmycar=newsportscar()
保时捷是一款跑车,所以你可以说:
SportsCar myCar=新款保时捷()

出于同样的原因,保时捷是一辆汽车,因此你可以肯定地说:

Car myCar = new Porsche();

底线是:超类(接口、抽象类或任何东西)可以包含对其子类的引用。

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

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