首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在多类中重定向构造函数中的实例?

是否可以在多类中重定向构造函数中的实例?
EN

Stack Overflow用户
提问于 2013-05-04 14:52:17
回答 2查看 53关注 0票数 0

我正在检查传递给多类构造函数的布尔条件,如果为真,我实际上是在尝试将this赋给子类的一个实例。

这当然不起作用,那么有没有办法以这种方式重定向实例呢?如果无法做到这一点,原因何在?

下面是多类:

代码语言:javascript
复制
public class MultiClass {

    String str;

    public MultiClass(boolean flag) {
        if (flag) {

            // doesn't work! wish it would:
            // this = new ExtraClass();

        } else {
            this.str = "you are in the first class";
        }
    }
} // end of MultiClass

class ExtraClass {

    String str;

    ExtraClass() {
        this.str = "you are in the second class";
    }
} // end of ExtraClass

...and测试人员类:

代码语言:javascript
复制
public class MultiClassTest {

    public static void main(String[] args) {
        MultiClass test = new MultiClass(false);
        System.out.println(test.str);
    }
} // end of MultiClassTest
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-04 14:57:46

您可以使用工厂方法,例如静态方法,它可以返回任何实现来创建不同的实现,也可以使用委托来委托实际的实现。(构造的类将只是一个包装器)

注意:构造函数不会创建实例,它只会初始化为您创建的实例。一旦创建,你就不能改变它的类型。

一种更简单的方法是让一个类检查标志以确定它应该做什么。(在代码中使用if语句)

代码语言:javascript
复制
public class MultiClass {
    final String str;

    public MultiClass(boolean flag) {
        if (flag) {
            this.str = "you are in the second class";
        } else {
            this.str = "you are in the first class";
        }
    }
}
票数 3
EN

Stack Overflow用户

发布于 2013-05-05 10:07:53

正如Peter在这里建议的那样,我已经发现了如何使用“工厂方法”设计模式,并将我的代码发布给后人。

下面是一个包含工厂方法的父类:

代码语言:javascript
复制
public abstract class Parent {

    /*
     * "factory method" design-pattern:
     */
    public static Parent getInstanceOf(boolean flag) {
        if (flag) {
            return new MultiClass();

        } else {
            return new ExtraClass();
        }
    }
} // end of Parent

...here是多类,它从父类扩展而来:

代码语言:javascript
复制
public class MultiClass extends Parent {

    String str;

    public MultiClass() {
        this.str = "you are in the first class";
    }
} // end of MultiClass

class ExtraClass extends Parent {

    String str;

    ExtraClass() {
        this.str = "you are in the second class";
    }
} // end of ExtraClass

下面的...and是带有main方法的测试类:

代码语言:javascript
复制
public class MultiClassTest {

    public static void main(String[] args) {

        boolean flag = false; // try changing to true
        Parent test = Parent.getInstanceOf(flag);

        if (test instanceof MultiClass) {
            System.out.println( ((MultiClass)test).str);

        } else if (test instanceof ExtraClass) {
            System.out.println( ((ExtraClass)test).str);
        }
    }
} // end of MultiClassTest

注意instanceof的用法和显式类型转换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16371467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档