我怎样才能调用子类方法?

时间:2016-05-04 11:27:54

标签: java oop inheritance subclass

如果此行需要保持不变,如何调用子类方法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(); 
} 

3 个答案:

答案 0 :(得分:3)

你的秘书班必须延长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类的方法,你需要将其强制转换:

((Secretary)secretary).work(); 

这将告诉编译器您的secretary是[{1}}类型Employee,然后您就可以调用Secretary方法。

答案 1 :(得分:2)

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

在父级中声明work()方法,使类抽象并在子级中实现它是有意义的。

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(); 
} 

答案 2 :(得分:1)

当您说Secretary extends Employee表示SecretaryEmployee中包含所有公开和受保护的内容时,请不要期望您将获得{{1}类对象中的所有内容1}}。

你可以做这样的事情

Employee

OR

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

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