Java为超类添加方法

时间:2017-07-21 15:42:33

标签: java inheritance polymorphism

我有一个课程,我无法访问其来源。

public class IDontHaveAccessToSource {...}

我想添加一些方法,如下:

public class MyClass extends IDontHaveAccessToSource {
    myMethod1() {...}
    myMethod2() {...}

    @Override
    methodInIDontHaveAccessToSource(){...}
}

但每当我想要将ClassCastException投放到IDontHaveAccessToSource的任何内容时,它都会给我一个MyClass

我该怎么做?

我不想使用

public class MyClass {
    IDontHaveAccessToSource obj;

    MyClass(IDontHaveAccessToSource obj) {
        this.obj = obj;
    }
    ...
}

并且IDontHaveAccessToSource没有任何构造函数可用。它被创造了#39;通过调用另一个类的函数:

IDontHaveAccessToSource obj = loadObject(filename);

2 个答案:

答案 0 :(得分:1)

你根本无法做到。使用 new Super()创建的对象无法转换为子类对象。如果可能的话,你就可以打破良好的面向对象编程的所有规则。

您只能环绕此类对象。例如,可以考虑装饰器或外观模式。

答案 1 :(得分:0)

由于内存中没有与子类的特定部分相关的对象数据,因此无法将更通用的类的对象强制转换为更具体的类。 比如说,你有一个有字段fA的A类。当您实例化该类的对象时,该字段将被初始化并占用内存中的某些位置。现在,通过添加字段fB将类A扩展为B.您创建一个在内存中分配fA和fB的对象。

a aObj = new B();是一个正确的演员,因为A知道aF,一旦你访问fA,它将在内存中找到该字段;

B bObj = new A();这是因为参考bF将不会成功(A的实例没有在内存中分配fB)