2015-12-30 4 views
0

я обеспечиваю два класса следующим образом:суперкласса и подклассов аргументы

класса Appliance

public class Appliance { 
    void start(Appliance t){ 
     System.out.println("Start Appliance"); 
    } 
} 

Тостер Класс

public class Toaster extends Appliance { 
    void start(Toaster t){ 
     System.out.println("Start Toaster"); 
    } 
} 

RunAppliance Класс

public class RunAppliance { 
    public static void main(String[] args) { 
     Appliance appliance = new Toaster(); 
     Toaster toaster = new Toaster(); 
     appliance.start(toaster); 
    } 
} 

Будучи новичком, это путать эс меня между перегрузкой методы и доминирующей, а также как аргументы получить влияние в одном типе аргумента является подклассом другого аргумента type.Thus я представляю 6 условия для того же:

1) Appliance Класс: аннулируется старт (Appliance t); тостер Класс: пустота начала (Устройство т)

2) Устройство класса: пустота начала (тостер т); тостер Класс: пустота начала (тостер т)

3) Устройство класса: пустота начала (Устройство т); тостер Класс: пустота начала (тостер т)

4) Устройство класса: пустота начала (тостер т); тостер Класс: пустота начала (Устройство т))

5) Устройство класса: пустота начала (Устройство т) & пустота начала (тостер т); тостер Класс: пустота начала (тостер т)

6) Устройство класса: пустота начала (Устройство т); Тостер Класс: пустота начала (Appliance т) & пустота начала (Тостер т))

Может кто-нибудь предложить мне необходимое правило для того же.

+1

Что именно вы спрашиваете? каковы эти «6 условий»? – luk2302

+1

Что такое необходимое правило? –

+0

Это разные версии одного и того же метода, имеющие разные типы аргументов, и полужирные - это имя класса, в котором они будут вызываться в предыдущих разделах кода. –

ответ

1

Неверный тип Toaster. Аргументом для его метода start() должен быть Appliance, а не Toaster.

В вашей реализации отсутствует Принцип замены Лискова. Вы не можете использовать Toaster в любом месте, которое требуется Appliance, поскольку оно не отменяет метод start(), как указано.

ли это так:

public class Toaster extends Appliance { 
    void start(Appliance a){ 
     System.out.println("Start Toaster"); 
    } 
} 
+0

Большое спасибо за ваш комментарий.so, если я исправлю эту ошибку, как поведение изменится на основании заданных условий и недействительных. –

+0

Я не знаю, как изменится поведение, но я знаю, что произойдет: полиморфизм означает, что экземпляр Appliance экземпляра будет печатать «Start Appliance» при вызове метода start(); экземпляр экземпляра среды выполнения будет печатать «Start Toaster», когда вы вызываете его метод start(). – duffymo

+0

Okz.so если я следую принципу только мое первое условие является правильным, все остальные недействительны ?? –

0

Я думаю, что вы спрашиваете, что будет на выходе в каждом из указанных ниже случаев:

Appliance appliance = new Appliance(); 
    Appliance applianceToaster = new Toaster(); 
    Toaster toaster = new Toaster(); 
    appliance.start(appliance); 
    appliance.start(toaster); 
    appliance.start(applianceToaster); 
    toaster.start(appliance); 
    toaster.start(toaster); 
    toaster.start(applianceToaster); 
    applianceToaster.start(appliance); 
    applianceToaster.start(toaster); 
    applianceToaster.start(applianceToaster); 

Как @duffymo указывает, изменение Тостер для ПРИБОР в методе запуска Тостера. Начало в Toaster скроет начало в Appliance для любого объекта, который является тостером во время выполнения. Вам нужно, чтобы пользователь супер получил доступ к началу работы в Appliance с самого начала в Toaster.

В момент компиляции устройство выглядит как Appliance, во время выполнения это устройство, поэтому вызывается запуск в Appliance, независимо от того, какой параметр отправлен на него.

Во время компиляции тостер выглядит как тостер, во время выполнения это тостер, поэтому вызывается начало в тостерах, независимо от того, какой параметр отправлен на него.

В момент компиляции прибор выглядит как устройство, во время выполнения оно является тостером, поэтому для запуска в Тостере создается полиморфный вызов, независимо от переданного ему параметра.

Смежные вопросы