如何调用子类方法?

How can I call a subclass method?

如果此行需要保持不变,我如何调用子类方法 work():

Employee secretary = new Secretary();

public class Employee {
}

public class Secretary extends Employee {
     public void work() {};
}

public static void main(String[] args) {
     Employee secretary = new Secretary();
     //secretary.work(); 
} 

您的秘书class必须延长Employee

public static class Employee {
}

public static class Secretary extends Employee{
     public void work() {
     }
}

public static void main(String[] args) {
     Employee secretary = new Secretary();
     ((Secretary)secretary).work(); 
} 

并且因为 secretary 被声明为 Employee 你不能调用 Secretary class 的方法,你需要转换它:

((Secretary)secretary).work(); 

这将告诉编译器您的 secretary 是类型 SecretaryEmployee,然后您将能够调用 work() 方法。

如果 parent 必须知道 API 方法,那么扩展 class 有什么用?这违背了抽象的概念(这意味着您需要在声明为 parent 类型的变量上调用方法)

在 parent 中声明 work() 方法是有意义的,使 class 抽象并在 child 中实现它。

public abstract class Employee {
    public abstract void work();
}

public class Secretary extends Employee {
    public void work() {
         //Implement here...
    };
}

public static void main(String[] args) {
    Employee secretary = new Secretary();
    //secretary.work(); 
} 

当你说 Secretary extends Employee 意味着 Secretary 将拥有所有 public 和 Employee 中受保护的东西 所以,不要指望你会得到对象中的所有东西类型 Employee.

你可以这样做

public abstract class Employee {
    public abstract void work();
}

public class Secretary extends Employee {
    public void work() {
         //Implement here...
    };
}

interface Stuff{
    void work();
}

class Employee implements Stuff{

    @Override
    public void work() {

    }
}

class Secretary extends Employee {
     public void work() {}
}