我对接口/继承更加困惑。这是示例情况。汽车类有私人会员,装备。跑车和面包车延长了汽车。他们都是汽车。但是,只有跑车应该能够设置齿轮。面包车不能改变装备(跟我一起)。
然后有一个接口,IGearChangable。跑车实现了这个界面。那么sports Car类有一个名为setGear的方法。我的问题是,我如何获取装备?如果我在汽车保护中做任何事情,即使货车不能更换装备,仍然可以使用改装装备的能力。
public class Car
{
private int gear;
public Car()
{
gear = 1;
}
//Any setGear function here would be available to GearChangable and Non
}
public class SportsCar extends Car implements IGearChangable
{
public SportsCar()
{
super();
}
public void setGear(int gear)
{
//How do I access gear?
}
}
public class Van extends Car
{
public Van()
{
super();
}
//This class should have NO access to change gear
}
public interface IGearChangable
{
public void setGear(int gear);
}
我觉得我错过了一个概念。跑车应该有自己的私人装备吗?这对我来说似乎也不对。
答案 0 :(得分:2)
创建传输接口
interface Transmission {
int getGear();
}
interface Car {
}
然后创建一个抽象基类:
public abstract class AbstractCar implements Car {
//...
}
public abstract class AbstractManualCar implements Car, Transmission {
private int gearNum;
public AbstractManualCar() {
gearNum = 0;
}
public void setGear(int gearNum) {
this.gearNum = gearNum;
}
public int getGear() {
return gearNum;
}
}
然后Van
延伸AbstractCar
,SportsCar
延伸AbstractManualCar
。
正如我七岁的孩子所说的那样,“容易腻,柠檬挤压。” :)
答案 1 :(得分:1)
为什么不简单地将“齿轮”字段移入SportsCar?如果货车无法改变档位值,为什么它应该有一个油田?
如果Van必须具有只读齿轮(在您的情况下始终为“1”),请在Car类中定义 abstract 方法getGear()。 SportCar实现它并返回字段的值。 Van实现它并简单地返回“1”。
答案 2 :(得分:0)
可以在课堂外访问声明为private
的变量。如果班上有公共getter方法。
在car类中创建get方法以获取齿轮的私有变量的值
像
public int getgear(){
return gear;
}