引用超类如何使用子类方法

时间:2015-03-16 15:14:00

标签: java inheritance subclass superclass

不知道怎么称呼我的头衔,因为我现在还不确定如何调用这个问题。 我得到了one superclassthree subclassessubclasses仅拥有自己的cunstructor,所有其他方法和属性都列在superclass中。 现在,这三个subclasses中的一个必须包含一个新属性delay和一个方法。但是如果我实现一个有点generic的方法(因为它不关心哪个子类正在使用它,因为它在方法本身中检查它。)但是在方法的超类中我希望如果我的对象是它可以访问延迟的特定子类。

任何人都可以告诉我如何在不将属性实现到超类本身的情况下实现这一目标? (只希望该子类可以访问此延迟属性的对象)

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

编辑:

有超类:Car

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

现在有子类:FastCar NormalCar RepairCar 所有这些都只在子类中有一个构造函数。

RepairCar应该有另一个属性delay,因为它现在正在修复。

drive method的超类中,它检查汽车是FastCarNormalCar还是RepairCar。当它是RepairCar时,它应检查延迟是否为0因此它可以驱动,否则它将等待一个转弯并将延迟降低到0。

现在我想只有我的RepairCar得到这个延迟属性而不是我的其他两个子类。但是如果我的驱动方法在超类中,它不会让我引用RepairCar的延迟,因为超类没有这个属性。

如何实现超类中所有3种Cartype的驱动方法而不实现超类的延迟?

2 个答案:

答案 0 :(得分: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();
       }
    }

    ...
}

答案 1 :(得分: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
        }
    } 
}
相关问题