Java将基类转换为扩展类

Java将基类转换为扩展类,java,Java,我有一个在我的项目中广泛使用的类,作为某种字段持有者。比如: class A { private String field = null; private String field2 = null; private String field3 = null; // and its generic Getters and Setters } 在代码的某些部分,我需要向这个类添加额外的字段。所以我做了这个 class B extends A { priva

我有一个在我的项目中广泛使用的类,作为某种字段持有者。比如:

class A
{
    private String field = null;
    private String field2 = null;
    private String field3 = null;

    // and its generic Getters and Setters
}
在代码的某些部分,我需要向这个类添加额外的字段。所以我做了这个

class B extends A
{
    private String fieldInB  = null;

    // and its Getters and Setters
}
在我的工作中,我认为我可以很容易地做到

public void foo( A a )
{
    B b = (B)a;
}
我可以把所有的字段都写在AOObject中,我可以很容易地在b中只设置字段并使用它。这是一个常见的问题,但我只是不知道如何解决,除非采用非常丑陋的方法:

public B( A a )
{
    // copy all the fields one at the time
}

你可以用。它允许将bean属性值从一个bean类映射到另一个bean类。

您可以使用。它允许将bean属性值从一个bean类映射到另一个bean类。

您混淆了Java的不同部分:

B b = (B)a;
这是经典的类转换,但要使用B类对象,您需要: 1.确保a属于B类,使用instanceof java关键字检查:

if (a instanceof B) {
   B b = (B) a;
}
二,。或者将a包装在B类对象中创建B类对象,并从a复制字段

PS在大多数Java编码约定中,建议只使用具体的值填充字段,而不使用默认的JavaVM值(null)填充字段

将类字段复制到新实例的舒适方式:

public A (A a) {
   this.field = a.field;
   this.field2 = a.field2;
   this.field3 = a.field3;
}
B班:

public B (A a) {
   super(a);
}

另一种方法-一些库可以像处理bean一样处理A类和B类。您可以在Tailal的答案中找到这些库的示例,您混淆了Java的不同部分:

B b = (B)a;
这是经典的类转换,但要使用B类对象,您需要: 1.确保a属于B类,使用instanceof java关键字检查:

if (a instanceof B) {
   B b = (B) a;
}
二,。或者将a包装在B类对象中创建B类对象,并从a复制字段

PS在大多数Java编码约定中,建议只使用具体的值填充字段,而不使用默认的JavaVM值(null)填充字段

将类字段复制到新实例的舒适方式:

public A (A a) {
   this.field = a.field;
   this.field2 = a.field2;
   this.field3 = a.field3;
}
B班:

public B (A a) {
   super(a);
}

另一种方法-一些库可以像处理bean一样处理A类和B类。您可以在Toill的答案中找到这些库的示例,实际上我没有得到您的确切要求。我确认你写这段代码的方式不对。 无法继承私有变量。如果需要将值扩展到子类,则应将这些变量声明为公共变量

public B(A a)
{
super.field=a.field;
super.field2=a.field2;
super.field3=a.field3;
}

实际上我没有得到你的确切要求。我确认你写这段代码的方式不对。 无法继承私有变量。如果需要将值扩展到子类,则应将这些变量声明为公共变量

public B(A a)
{
super.field=a.field;
super.field2=a.field2;
super.field3=a.field3;
}

嗯,我想我可以通过他们的公众获取者和设定者来访问他们。考虑到你的回答,我知道我能做到,我只是觉得有一个更简单的方法。如果没有一次物理映射一个字段,请不要编写这样错误的示例:这样的构造函数应该是一个类,而B构造函数应该只调用supera构造函数!嗯,我想我可以通过他们的公众获取者和设定者来访问他们。考虑到你的回答,我知道我能做到,我只是觉得有一个更简单的方法。如果没有一次物理映射一个字段,请不要编写这样错误的示例:这样的构造函数应该是一个类,而B构造函数应该只调用supera构造函数!我调查了一下,这似乎是我想要的。嗯,我调查了一下,这似乎是我想要的东西。我的问题是a不是B的实例,但我想让它成为一个实例,而不需要复制构造函数。我必须对几个类执行此操作,我只是认为可能有一种更简单的方法…您可以为类A创建构造函数,将所有字段复制到新实例,并为类B创建构造函数,将其称为类构造函数。。。我现在要在我的答案中添加示例。我的问题是a不是B的实例,但我想让它成为一个,而不需要复制构造函数。我必须对几个类执行此操作,我只是认为可能有一种更简单的方法…您可以为类A创建构造函数,将所有字段复制到新实例,并为类B创建构造函数,将其称为类构造函数。。。我现在将在我的答案中添加示例。