java - 学习多态性

标签 java polymorphism

为什么我无法从 Test 类中的 main 访问 Daily 类内部的方法。具体来说,appsOn() 方法是我想从 main.c 中访问的方法。如果我最初创建一个 Daily 类型的对象,那么它允许我访问genesisOn() 方法,但如果我最初将它声明为一般约会,那么它就不允许我访问。

顺便说一句,我正在尝试自学多态性。

public class Appointment{

private String description;
private String date;

public Appointment(){
    this.description = "";
    this.date = "";
}
public Appointment(String de, String da){
    this.description = de;
    this.date = da;
}

public void setDescription(String d){
    this.description = d;
}
public String getDescription(){
    return this.description;
}
public void setDate(String d){
    this.date = d;
}
public String getDate(){
    return this.date;
}

public String toString() {
    return "Appointment [description=" + description + ", date=" + date + "]";
}
}

public class Daily extends Appointment{

public Daily(){
    super();
}
public Daily(String de, String da){
    super(de, da);
}

public boolean occursOn(int year, int month, int day){
    return true;
}
public String toString(){
    String str = "Daily " + super.toString();
    return str;
}
}

public class Test {

public static void main(String [] args){

    Appointment appt1;

    appt1 = new Onetime("See doctor", "01/01/2015");

}
}

最佳答案

这是因为子类继承父类的属性,而不是相反。尽管您可以将 Daily 实例泛化为 Appointment,但您无法在不进行强制转换的情况下在实例上调用 Daily 特定方法。

如果要在Daily和Appointment中都访问occurredOn(),则需要在Appointment类中声明该方法,以便其子类继承该方法。

关于java - 学习多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29067118/

相关文章:

c++ - 通过公共(public)继承仅公开某些方法

java - 动态(运行时)多态性在java中如何工作?换句话说,JVM 如何知道要调用哪些方法?

javascript - 多态参数javascript

c++ - 如何从一个成员类/结构中获取一个类的成员数据?

java - https URL 适用于 curl,但不适用于 Java

java - 不同的 REST 方法修改同一个对象 - RollbackException、OptimisticLockException、StaleStateException

java - Matlab java接口(interface): java. io.IOException : The issuer can not be found in the trusted CA list?

c++ - 多态时识别对象的类型

java - index.html 未显示(不支持请求方法 'GET')

java - 枚举类型的默认修饰符字段是什么?