方法覆盖返回null

Ger*_*das 2 java overriding

我是Java的新手.所以问题可能听起来很简单,但我陷入困境,无法弄清楚为什么这段代码返回null和0.0?

file:Transport.java

public class Transport {

        private String name;
        private double price;

    public Transport(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String carName() {
        return name;
    }

    public double carPrice(){
        return price;
    }
}

文件:Car.java

public class Car extends Transport{

    protected String name;
    protected double price;

    public Car(String name, double price) {
        super(name, price);
    }

    @Override
    public String carName(){
        return name;
    }

    @Override
    public double carPrice(){
        return price * 1.5;
    }
}

file:Main.java

public class Main {
    public static void main(String[] args) {

        Car c = new Car("CarBrand", 1000);

        System.out.println("Name: " + c.carName());
        System.out.println("Price: " + c.carPrice());
    }
}

产量

Name: null
Price: 0.0

Jon*_*eet 9

你已经声明了单独的 nameprice变量Car,并且从未为它们赋值 - 它们nameprice声明(和初始化)的变量和变量不同Transport.所以,你看到的默认值Stringdouble,基本上是这样.摆脱那些额外的变量Car,并用于super.carPrice()获得原始价格Transport:

public class Car extends Transport {    
    public Car(String name, double price) {
        super(name, price);
    }

    @Override
    public double carPrice(){
        return super.carPrice() * 1.5;
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,carName()除非您真的希望它改变行为,否则根本不需要覆盖.

我还建议改变carName()carPrice()getName()getPrice()更加地道.