AP CS Practice - OOP - PullRequest
       21

AP CS Practice - OOP

0 голосов
/ 10 февраля 2012

Я нахожусь в AP CS и пытаюсь выяснить, работает ли это.

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

Controller myControl = new Thingy();

Предположим, что интерфейсы / классы в верхней части фактически определены.Работает ли четвертая строка (Controller myControl = new Thingy();), или вы не можете создать объект из такого интерфейса?

Ответы [ 3 ]

2 голосов
/ 10 февраля 2012

Можно.

В этом случае вы создаете экземпляр Thingy, который является конкретным классом. Вы только что объявили его как тип Controller. Это означает, что все, что использует его, может получить доступ только к методам, доступным в интерфейсе Controller (если они не понижены, не используются отражения и т. Д.). Это хорошая практика, потому что она позволяет вам поменять фактическую реализацию myControl, и пользователям объекта все равно.

1 голос
/ 10 февраля 2012

Это основы полиморфизма и наследования - два термина, которые вы должны жить и дышать, чтобы полностью понять ООП.

Учтите это:

У вас есть интерфейс Car, объект SportsCar, который реализуетАвтомобиль и объект Porsche, который расширяет SportsCar.

SportsCar IS-A Автомобиль, так что вы можете сказать: Car myCar = new SportsCar(); Porsche IS-A SportsCar, чтобы вы могли сказать: SportsCar myCar = new Porsche();

К тому жемаркер, Porsche IS-A Car, так что вы точно можете сказать:

Car myCar = new Porsche();

Итог: суперкласс (интерфейс, абстрактный класс или что-то еще) может содержать ссылки на свои подклассы.

0 голосов
/ 09 сентября 2017

Это создает экземпляр класса Thingy , который реализует Controller .Сам интерфейс Controller не может быть создан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...