非抽象且不覆盖抽象方法 - IDL

Posted

技术标签:

【中文标题】非抽象且不覆盖抽象方法 - IDL【英文标题】:Not abstract and does not override abstract method - IDL 【发布时间】:2015-04-17 04:33:52 【问题描述】:

我正在使用 Java 开发 CORBA 应用程序。我正在使用“idlj”来生成存根和骨架。编译时出现此错误。

Account.java:12: 错误:Account 不是抽象的并且不会覆盖 Servant 中的抽象方法 _all_interfaces(POA,byte[])
公共类 Account 扩展 org.omg.PortableServer.Servant
       ^
注意:SMTS/AccountPOA.java 使用未经检查或不安全的操作。

这些是类定义和idl定义。

SMTS.idl 文件

module SMTS
    interface Account
        attribute string accountID;
        attribute double balance;
        void setAccountID(inout string accid);
        void setBalance(inout double value);
    ;
;

Account.java 类

public class Account extends AccountPOA
    private ORB orb;
    private String accountID;
    private double balance;
    public void setORB(ORB orb_val)
        orb = orb_val;
    
    public void setAccountID(String accid)
        this.accountID = accid;
    
    public void setBalance(double value)
        this.balance = value;
    

【问题讨论】:

AccountPOA 中的内容看起来像是扩展了另一个类“Servant”,它是一个抽象类,并未在 Account 或 AccountPOA 中完全定义。 【参考方案1】:

AccountPOA 类或其超类之一具有一个或多个尚未被覆盖的抽象方法。如果你扩展一个包含抽象方法的抽象类,你必须重写所有的抽象方法。唯一的例外是你的类本身是抽象的。只要您有一个可以实例化的具体类(=非抽象类),您必须覆盖所有抽象方法。

所以,看看AccountPOA 的代码以及它扩展或实现的所有类和接口。必须有一个抽象方法在类层次结构中未被覆盖。

【讨论】:

以上是关于非抽象且不覆盖抽象方法 - IDL的主要内容,如果未能解决你的问题,请参考以下文章

需要覆盖非抽象类的特定方法

什么是抽象类什么是接口两者有什么区别?如何使用它(转载)

Java基础学习--抽象类与抽象函数

面试总结

设计模式

绑定与非绑定方法 继承 继承与抽象 查找属性关系 派生与覆盖 访问父类的内容