gpt4 book ai didi

java - 传递父类(super class)的实例时自动构造子类

转载 作者:太空宇宙 更新时间:2023-11-04 07:18:50 25 4
gpt4 key购买 nike

我通过传入父类(super class)的实例来创建子类的实例。这是我的代码 - 可以工作 - 但感觉不对。

我的问题是:Java 没有使用对象转换等方式对此提供 native 支持吗?

或者如果我真的想自动化它,我是否被迫使用反射/BeanUtils?

下面的示例已被简化以突出显示问题。我的现实世界代码还有很多很多字段。

谢谢,亚当。

import java.util.Date;


public class Person
{
private String name;
private Date dateOfBirth;


public String getName()
{
return name;
}


public void setName(String name)
{
this.name = name;
}


public Date getDateOfBirth()
{
return dateOfBirth;
}


public void setDateOfBirth(Date dateOfBirth)
{
this.dateOfBirth = dateOfBirth;
}
}


public class Soldier extends Person
{
private String rank;


public Soldier(final Person p)
{
/*
* Isn't there a better way of doing this? What if we add a new
* attribute to Person - we could forget to add it here...
*/
setName(p.getName());
setDateOfBirth(p.getDateOfBirth());
}


public String getRank()
{
return rank;
}


public void setRank(String rank)
{
this.rank = rank;
}
}

最佳答案

What if we add a new attribute to Person - we could forget to add it here...

  • 或者应该关注这些方法的接口(interface)。
  • 或者在父类(super class)中编写方法

因此,从下面的示例中,我们将 Person 的接口(interface)传递给 `Solder:

PersonItf

public interface PersonItf {
String getName();
String getDateOfBirth();
}

焊接

public class Soldier extends Person {
private String rank;


public Soldier(final PersonItf p)
{
// now we call all inteface methods
setName(p.getName());
setDateOfBirth(p.getDateOfBirth());
}


public String getRank()
{
return rank;
}


public void setRank(String rank)
{
this.rank = rank;
}
}

public abstract class Person implements PersonItf
{
private String name;
private String dateOfBirth;


@Override
public String getName(){
return name;
}


public void setName(String name){
this.name = name;
}

@Override
public String getDateOfBirth(){
return dateOfBirth;
}


public void setDateOfBirth(String dateOfBirth){
this.dateOfBirth = dateOfBirth;
}
}

主要

public static void main(String[] args) {

PersonItf person = new Person();

Soldier solder = new Soldier(person);

}

关于java - 传递父类(super class)的实例时自动构造子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19607496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com