Java从抽象类访问子类方法/变量

标签 java inheritance abstract

这段代码不是我的,我需要对其进行一些改进,但我陷入了这个问题。

我有一个抽象类“CallNode”和很多子类,其中一个是“Call”。 “Checker”类拦截未接来电,但将它们作为 CallNode 返回。我的问题是我需要获取此调用的 ID,但我无法通过 CallNode 访问它。

你对解决这个问题有什么建议吗?

我给你代码,这样你可以更好地理解问题:

public abstract class CallNode {
    public abstract CallNode hasMissingCall();
}

public class Call extends CallNode {
    public int id;

    // Simplification of method
    public CallNode hasMissingCall() {  
        if (true)
            return this;
        // ...
    }
}

public class Checker{
    private static CallNode rootExpected;

    CallNode missing = rootExpected.hasMissingCall();

    System.out.println( missing.id ); // THE PROBLEM!!!
}

提前致谢!!!

最佳答案

在抽象类中定义一个返回id的模板方法:

public abstract class CallNode {
    public abstract CallNode hasMissingCall();

    public abstract int getId();
}

让子类实现它:

public class Call extends CallNode {
    public int id;

    // Simplification of method
    public CallNode hasMissingCall() {  
        if (true)
            return this;
        // ...
    }
    public int getId()
    {
         return this.id;
    }
}

这是一种选择。我个人将在 CallNode 类中向上移动 id 字段,因为我认为它应该是唯一的并由所有子类共享。

关于Java从抽象类访问子类方法/变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12875129/

相关文章:

java - 字符串不匹配,即使 "patternString"是 "text"的子字符串

java - 服务器上适用于 JDK 的 Eclipse IDE

java - AssertJ 多维数组断言(深度等于)

java - 非通用子类继承(实现)通用父类(super class)(接口(interface))

java - 扩展 JFrame 与在程序中创建它

c++ - 我如何使用抽象对象数组?无效的抽象类型错误

php - 为什么 php 接口(interface)中的关键词是abstract和void?

java - 如何最好地清除大量对象中的变量?

objective-c - 子类是否继承了 Objective-C 中其父类的协议(protocol)?

java - 如何从父级的方法访问子级的继承成员