有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是修复此继承结构的最佳方法?

我目前正在从事一个Java项目,我有3个类(I、H和O),它们继承自抽象类N。其中,I和O需要类S中描述的属性,H和O需要类p中描述的属性。属性p和S都不能通过接口生成。这导致了一个问题,如果我要实现这样的结构: N->;P N->;s 而我->;S、 O->;s 和O->;P、 H->;P
但这在java中是不可能的,因为它不允许多重继承。 一个合乎逻辑的解决方案是让S从P继承,P从N继承。但这会导致问题,我有P的属性,而它不需要这些属性

我正在寻找一个干净的方法来实现这一点,谢谢你的阅读


共 (3) 个答案

  1. # 1 楼答案

    I与“属性p和S都不能通过接口生成”有关

    如果需要获取字段值,只需定义要实现的方法,如:

    public interface MyInterface{
     void getPropertyOne();
     void getPropertyTwo();
    }
    

    请记住,由于Java8可以在Java接口上获得默认方法,如果您的一些子类需要相同的实现,或者您可以使用抽象类获得类似的行为,那么它可能会很有用

  2. # 2 楼答案

    似乎您需要将PS无类的单例设置为Composition over Inheritance。从另一个意义上讲,你可以把PS作为IOHcomposite collaborators来使用它们。 将N保留为抽象,但前提是N提供了一组通用的方法和字段。。换句话说,=N是每个类的模板

    以下是我的看法:

    class I extends N {
        private S s;
    
        public I(S s) {
            this.s = s; 
        }
    }
    
    class O extends N {
        private S s;
        private P p;
    
        public O(S s, P p) {
            this.s = s; 
            this.p = p;
        }
    }
    
    class H extends N {
        private P p;
    
        public H(P p) {
            this.p = p; 
        }
    }
    
    interface P {
        public String getProperty();
    }
    interface S  {
        public String getProperty();
    }
    
  3. # 3 楼答案

    尝试抽象接口中的公共属性