多重继承java

多重继承java,java,inheritance,multiple-inheritance,Java,Inheritance,Multiple Inheritance,我在一个有以下课程的项目中工作: public class Rectangle { public void printMe() { print("I am a Rectangle"); } } public class Square extends Rectangle { @Override public void printMe() { print("I am a Square"); } } public class

我在一个有以下课程的项目中工作:

public class Rectangle {
    public void printMe() {
        print("I am a Rectangle");
    }
}

public class Square extends Rectangle {
    @Override
    public void printMe() {
        print("I am a Square");
    }
}

public class RedRectangle extends Rectangle {
    @Override
    public void printMe() {
        super.printMe();
        print(" and I am red");
    }
}
当然,这些类还有其他方法和属性

我想创建另一个类RedSquare,它继承了矩形中的所有属性和方法,但它还需要用Square类中的方法覆盖它自己的方法。它将使用RedRectangle和Square类中的代码打印“我是正方形,我是红色”

如果可以的话,它应该能够使用来自Square和RedRectangle的方法,否则它应该使用来自Rectangle的方法,并且它应该强制开发人员自己编写在Square和RedRectangle中被重写的所有这些方法的代码

我实际上知道这是多重继承,Java不支持它,但我需要实现这种行为

我尝试使用Square和RedRectangle作为私有属性来实现此功能,无论如何,如果我调用某个在内部调用另一个方法的方法RedRectangle.myMethod(),它将使用自身(或最终在超级矩形中)中存在的实现,而不是重写它的RedSquare(或最终在Square中)

有没有什么有用的模式可以最大限度地重用代码? 您将如何实现这一点


非常感谢。

当您需要矩形的颜色时,您使用的是矩形的属性,而不是矩形的子类型。在这里,您应该支持组合而不是继承,创建一个
ColorOfShape
类,它可以是
Rectangle
的属性

class Rectangle {
    ColorOfShape color;
    void printMe() { printMeOnly(); printColor(); }
    void printMeOnly() { print("I am a Rectangle"); }
    void printColor() { color.printMe(); }
}
class Square extends Rectangle {
    @Override void printMeOnly() { print("I am a Square"); }
}

abstract class ColorOfShape {
    abstract void printMe();
}
class RedColor extends ColorOfShape {
    @Override void printMe() { print(" and I am red"); }
}

您可以使用
接口
…您可以在
Java
中实现多个
接口
。在不发布有问题的代码的情况下,不要解释代码中的问题。您可以在中执行类似操作。