繁体   English   中英

限制由少数子类重写的类方法

[英]restricting a class method overridden by few child classes

我在1次采访中询问了1个问题

class Birds {
     public void fly();
     public void eat();
     public void sleep();
}

Have several other classes extending it like -

Sparrow extends Birds{
   overriding fly();// Sparrow can have its own style to fly
   overriding eat();
   overriding sleep();
}

Eagle extends Birds{
   overriding fly();// Eagle can have its own style to fly

}

Ostrich extends Birds {
    overriding fly();// Ostrich could not fly !!!
}

我怎么能限制这种情况? 由于父类在此处不知道其Child类。 Birds类扩展了一些类可以覆盖的类有些无法覆盖。

你需要使用组合

  1. 定义一个名为Flyableinterface ,它有一个fly()方法。 SparrowEagle 实现了这个界面。 Ostrich没有。

  2. 定义一个名为Living的接口,比如说有eat()sleep()方法。 所有类型都实现了该接口。

  3. 你可以向你的面试官指出,你可以拥有一个实现Flyable不是 LivingAeroplane()对象。

您可以简单地添加FlyingBirdGroundBird类并使它们抽象化。

public class Birds {
    public void eat() {
        // default implementation
    }
    public void sleep() {
        // default implementation
    }
}

abstract class FlyingBird extends Birds {
    public abstract void fly();
}

abstract class GroundBird extends Birds {
    public abstract void walk();
}

class Sparrow extends FlyingBird {
    @Override
    public void eat() {
        // different implementation
    }
    @Override
    public void sleep() {
        // different implementation
    }
    @Override
    public void fly() {
        // some impl
    }
}

class Eagle extends FlyingBird {
    @Override
    public void fly() {
        // some impl
    }
}

class Ostrich extends GroundBird {
    @Override
    public void walk() {
        // walk implementation
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM