【问题标题】:Check two objects of different classes检查不同类的两个对象
【发布时间】:2014-03-26 18:43:06
【问题描述】:

我有三个班级:

  1. 人类
  2. 父亲
  3. 孩子。

子类扩展了父亲,父亲扩展了人类。

我已经创建了每个类的一些实例并将它们存储到一个 ArrayList 中。

现在我想编写一个方法来检查对象father1是否与对象child1地址字段(父类和子类的实例)具有相同的字段地址(例如:“21 str Goodwin”)并将此方法提供给我的ArrayList 并在找到任何结果时打印。

我该怎么做?

为了更清楚,让我在这里添加我的代码:

人类阶级:

  public class Om {
  String nume;
  String prenume;
  String cnp;

Om(String nume,String prenume,String cnp){
this.nume=nume;
this.prenume=prenume;
this.cnp=cnp;

}
@Override
public String toString() {
    return "Numele omului: " + this.nume +"\n"+ "Prenumele omului: " + this.prenume   +"\n"+ "Cnp-ul omului: " + this.cnp + "\n" ;
}


}

父类:

public class Parinte extends Om{
String domiciliu;
Parinte(String nume, String prenume, String cnp, String domiciliu){
    super(nume,prenume,cnp);
    this.domiciliu=domiciliu;
}

@Override
public String toString() {
    return "Numele parintelui: " + nume +"\n"+
            "Prenumele parintelui :" + prenume +"\n"+ 
            "Cnp-ul parintelui: " + cnp +"\n"+ 
            "Domiciliul parintelui: "+domiciliu+"\n"; 
}

}

儿童班:

public class Copil extends Parinte {
int varsta;
Copil(String nume, String prenume, String cnp, String domiciliu, int varsta){
    super(nume,prenume,cnp,domiciliu);
    this.varsta=varsta;
}
@Override
public String toString() {
    return "Numele copilului: " + nume +"\n"+
            "Prenumele copilului :" + prenume +"\n"+ 
            "Cnp-ul copilului: " + cnp +"\n"+ 
            "Domiciliul compiluiui: "+ domiciliu +"\n"+
             "Varsta copilului: "+varsta+"\n";
}


}

我按字母顺序排序列表的方法:

import java.util.*;

public class comparareNume implements Comparator<Om>{
public int compare(Om om1, Om om2){
    return om1.nume.compareTo(om2.nume);}


}

还有我的主要课程:

import java.util.*;
public class main {

public static void main(String[] args) {
    Om om1=new Om("Dubolari", "Dragos", "2006004034120");
    Om om2=new Om("Andronachi","Andrei", "12591295967123");
    Parinte p1=new Parinte("Vreascu","Andy","5845289564684","Al. Cel Bun 13");
    Copil c1 = new Copil("Mamaliga","George","5942356874156","Al. Cel Bun 13", 15);
    List<Om> colectie = new ArrayList<Om>();
    colectie.add(om1);
    colectie.add(p1);
    colectie.add(c1);
    colectie.add(om2);

    comparareNume comparNume = new comparareNume();
    Collections.sort(colectie, comparNume);
    System.out.println(colectie);       
    }


}

【问题讨论】:

    标签: java


    【解决方案1】:

    FatherObj.getAddress().equals(ChildObj.getAddress())

    getAddress() 和 Child 和 Father 内部字段 address 的示例

    private String address = "21 str Goodwin"
    
    public String getAddress() {
       return address;
    }
    

    【讨论】:

    • 是的,像这样。因为我认为我需要先创建 getAddress 方法?
    • 我可以把getAddress()方法只放在父类中,子类可以继承吗?不加倍代码的原因。
    • 你可以,虽然我不习惯看到 getter 和 setter 继承
    • 我同意 setter 很不寻常,但为什么是 getter?继承 getter 似乎很常见。
    • @aliteralmind 只是我个人的经验,我不经常看到它。这只是一种意见,和所有意见一样,它意义不大。
    【解决方案2】:

    将这样的函数放入Human,通过构造函数设置(也可以通过setter设置,但在构造函数中这样做允许不变性)。

    public Human(String address)  {
       addr = address;
    }
    public String getAddress()  {
       return  addr;
    }
    

    所有子类都可以访问此函数。

    然后您可以按照@NappaTheSaiyan 的建议访问它

    【讨论】:

    • 我不能把这个方法放在人类没有地址字段中,所以我认为我最好把它放在父亲中,因为父亲和孩子有地址,孩子可以从那里继承它,还是我错了?
    • 我不同意。当任何其他类型的人(例如Mother)扩展Human 时,这将需要您的getAddress 函数位于多个位置。另一种方法是创建一个Addressable 接口并在那里声明函数(FatherMother 将实现它),但无论哪种方式,该函数都应该有一个集中的位置,以避免重复代码。 (如果Human 有一个从未使用过的地址,只需将其设置为null——你甚至可以有一个额外的hasAddress() 标志函数。有些东西......)将函数放入Father 是一个错误我的意见。
    • 好的,我理解你,这是一个不错的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多