另一个"找不到符号"

时间:2014-04-26 05:39:10

标签: java inheritance visibility

我的代码中找不到符号错误(符号:方法setAr(boolean))。

这是我的Main.java文件:

class Vehicle {
    protected int marchs;
    protected int rode;
    public void xydar(int km) { System.out.print("\nxydei "+ km +" km!"); }
}
class Car extends Vehicle {
    public Car() { this.rode = 4; }
    public void xydar(int km) {
    super.xydar(km);
    System.out.println(" Estou de car!");
    }
}
class CarLux extends Car {
    private boolean ar;
    public CarLux() { this.ar = true; }
    public void setAr(boolean newAr) { this.ar = newAr; }
    public void xydar(int km) {
        super.xydar(km);
        if (this.ar)
        System.out.println(" ON!");
        else System.out.println(" OFF!");
    }
}
public class Main {
public static void main(String []args) {
    Vehicle moto = new Vehicle();
    moto.xydar(90);
    Vehicle car1 = new Car();
    car1.xydar(100);
    Vehicle car2 = new CarLux();
    car2.xydar(400);
    car2.setAr(false);
    car2.xydar(400);
    }
}

如何正确调用setAr()方法?谁能帮我?我是Java新手。 提前谢谢。

2 个答案:

答案 0 :(得分:4)

您需要将car2声明为CarLux,而不是Vehicle

CarLux car2 = new CarLux();

这是因为setAr()方法是在CarLux上定义的。 car2目前保存在Vehicle类型的变量中,因此当您调用car2方法时,只有Vehicle声明的方法可用。

答案 1 :(得分:0)

你只能通过CarLux类型的对象调用setAr方法,因为这是CarLux而不是Vehicle的方法所以你必须将car2转换为CarLux然后调用这样的方法 -

((CarLux)car2).setAr(false);