2015-03-16 2 views
0

Не знаю, как назвать мой заголовок, потому что я не уверен, как назвать эту проблему прямо сейчас. Я получил one superclass и three subclasses. subclasses получил только cunstructor, все остальные методы и атрибуты перечислены в superclass. Теперь один из этих трех subclasses должен содержать новый атрибут delay и способ для этого. Но если я реализую несколько метод generic (потому что он не заботится о том, какой подкласс использует его, потому что он проверяет его в самом методе.), Но в суперклассе в методе я хочу, чтобы, если мой объект относится к этому конкретному подклассу, он может получить доступ к задержке.Ссылка на суперкласс Как я могу использовать методы подкласса

Любой может сказать мне, как достичь этого, не внедряя атрибут в сам суперкласс? (Только хотим, чтобы объект этого подкласс может получить доступ к этому атрибуту задержки)

else if (this instanceof repairCar) { 
    if(this.getDelay() != 0){ 
    } 
} 

Edit:

Существует суперкласс: Car

This contains methods like setSpeed and corresponding attributes 
ant a method called drive. 

сейчас есть подклассы: FastCarNormalCarRepairCar который все получил только конструктор в подклассе.

Ремонт должен иметь другой атрибут delay из-за его ремонта прямо сейчас.

В суперкласса в drive method он проверяет, является ли FastCar, NormalCar или RepairCar Автомобиль. Когда он равен RepairCar, он должен проверить, является ли задержка 0, поэтому он может двигаться в противном случае, он будет ждать поворота и опустить задержку до 0.

Теперь я хочу, чтобы только мой ремонтник получил этот атрибут задержки, а не мой другой два подкласса. Но если мой метод диска находится в суперклассе, он не позволит мне ссылаться на задержку RepairCar из-за того, что суперкласс не имеет этого атрибута.

Любой способ реализовать метод привода для всех 3-х Картипов в суперклассе без внедрения задержки в суперкласс?

+1

Где вы хотите использовать задержку? Покажите нам большую картинку. –

+0

Это звучит полностью перепутано. Пожалуйста, показать ВСЕ соответствующий код/​​классы. – OldProgrammer

+0

извините за беспорядок .. Обновил его и сделал ясно (надеюсь) – NhatNienne

ответ

0

не могли бы вы сделать что-то вроде:

abstract class AbstractCar { 

    public void performAction() { 
     // stuff 
     doSomething(); 
    } 

    protected abstract void doSomething(); 

    static class RepairCar extends AbstractCar { 

     private int delay; 

     @Override 
     protected void doSomething() { 
      // do something based on delay 
     } 
    } 

    static class FastCar extends AbstractCar { 

     @Override 
     protected void doSomething() { 
      // do something with no delay 
     } 
    } 
} 
1

Почему суперкласс нести ответственность за это? Это должно выполняться только определенным классом.

E.g.

public class Car { 
    public void drive() { 
     // do something all cars do 
    } 
} 

Ваш подкласс:

public class RepairCar extends Car { 
    public int delay() { 
     return this.delay; 
    } 

    @Override 
    public void drive() { 
     if (delay() == 0) { 
     super.drive(); 
     } else { 
     decreaseDelay(); 
     } 
    } 

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