首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AP CS实践- OOP

AP CS实践- OOP
EN

Stack Overflow用户
提问于 2012-02-10 23:46:42
回答 3查看 163关注 0票数 0

我在AP CS中,正在尝试弄清楚这是否有效。

代码语言:javascript
运行
复制
public interface Controller
public class Widget implements Controller
public class Thingy extends Widget

Controller myControl = new Thingy();

假设在顶部的接口/类是实际定义的。第四行(Controller myControl = new Thingy();)可以工作吗?或者您不能从这样的接口创建对象吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-10 23:50:02

你可以的。

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

票数 2
EN

Stack Overflow用户

发布于 2012-02-11 00:02:41

它是多态性和继承的基础--这两个术语是你应该充分理解OOP的。

请考虑以下内容:

您有一个Car接口、一个实现Car的SportsCar对象和一个扩展SportsCar的Porsche对象。

保时捷是一辆车所以你可以说:Car myCar = new SportsCar(); SportsCar IS-A SportsCar所以你可以说:SportsCar myCar = new Porsche();

出于同样的原因,保时捷是一辆车,所以你可以明确地说:

代码语言:javascript
运行
复制
Car myCar = new Porsche();

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

票数 1
EN

Stack Overflow用户

发布于 2017-09-10 02:41:26

这将创建Thingy类的一个实例,它实现了Controller。控制器接口本身不能实例化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9230482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档