方法覆盖的意外问题

时间:2013-09-01 21:34:18

标签: java

我的问题类似于此

public class Ticket {
public int Price{ return null;} }

public class RedTicket extends Ticket {
public int Price { return 40; } }

Ticket t = new RedTicket();
int test = t.Price();

如果我在C#中使用virtual / override个关键字,我希望这会返回40。而是返回null

如何让它返回40

2 个答案:

答案 0 :(得分:1)

Price()方法的返回类型为int。无法将null分配给int,因此在null中返回Price()会导致编译错误。您还忘记了Price()方法中的括号。

以下类定义应该编译:

public class Ticket {
    public int Price() { // added brackets
        return 1; // changed null to an int value
    } 
}

public class RedTicket extends Ticket {
    public int Price() {
        return 40; 
    }
}

如果您现在执行

Ticket t = new RedTicket();
int test = t.Price();

你会发现40(而不是1返回的Ticket.Price()

答案 1 :(得分:1)

首先,您需要更正方法Price()的语法,您忘记在两个类中的方法名称之后使用括号。

然后,您需要将类Ticket中的Price()方法的返回值设置为类似0或1的int值。因为返回类型是int,如何返回null值。您编写的代码将无法编译。

创建方法时还有一件事是使用小写字母开始名称,这是java中的标准约定。

更正后的代码:

public class Ticket {
public int price(){ return 0;} }

public class RedTicket extends Ticket {
public int price { return 40; } }

Ticket t = new RedTicket();
int test = t.Price();