java 子类 如何 “多继承”(类似) 多个不同的提供属性的父类 ?

作者站长头像
站长
· 阅读数 10

概述

问题中的多继承指的是 (一种类与类之间的关系, 不一定是具体语言的实现, java没有实现类的多继承, 实现了接口的多继承)

通过 继承 组合 混入 冗余 等方式

我现在想要 实现混入的方式

混入: A类的 属性 = AA类的属性 + AB类的 属性 + 其他 属性。

    a = {...aa, ...ab, o, t }

组合: A类的 属性 = AA类的实例 + AB类的 实例 + 其他 属性。

    a = {aa:{  time1 }, ab: {o2, time2}, o, time } 

冗余: A类的 属性 = 复制到文件(AA类的属性 + AB类的 属性) + 其他属性。

    a = { time1,o2, time2, o, time }

需求

  • 父类 CommonA 父类CommonB 存放通用属性
  • 接口 IcommonA IcommonA 存放通用属性
  • 子类 Son 需要继承两个类/接口的属性

现状

java 子类 如何 “多继承”(类似) 多个不同的提供属性的父类 ?

如果采用 interface IcommonA IcommonA , Lombok 的 @Data 不起作用, 接口中的属性无法 获得 getter/setter

问题

  1. 如何 实现 ·多继承· 的效果
  2. 是不是需要 重写 @Data
回复
1个回答
avatar
test
2024-07-14

按目前的情况看,你说的不能动的基类有多个实现,为什么在你这就要把多个基类让一个类继承呢。

java不全面开放多继承,我想原因是很多开发者会滥用多继承,导致项目难以维护,其收益是要远小于开放多继承的。

一个好维护的代码,一个类的功能设计本身就要遵循解耦的,滥用多继承很明显会变得非常容易破坏设计结构,后果就是爽了当前的开发者,苦了后来的维护者。


如果真的想要实现,lombok 的代理注解 @Delegate 能够完全实现你的要求

public class DelegationExample {
    @Delegate(types=Test1.class)
    private final Test1 test1 = new Test1();

    public static void main(String[] args) {
        new DelegationExample().test();
    }
}

class Test1 {
    public void test() {
        System.out.println("test1: test");
    }
}

java 写法:

public class DelegationExample {
    private final Test1 test1 = new Test1();

    public DelegationExample() {
    }

    public static void main(String[] args) {
        (new DelegationExample()).test();
    }

    public void test() {
        this.test1.test();
    }
}
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容