メソドの多重定義
引数が異なる複数の同一名のメソドを定義することをメソドの多重定義という。
public void printAudit(StringBuffr buffer) {
buffer.append("Name=");
buffer.append(getName());
buffer.append(",");
buffer.append("Age=");
buffer.append(getAge());
buffer.append(",");
buffer.append("Height=");
buffer.append(getHeight());
buffer.append(",");
buffer.append("Weight=");
buffer.append(getWeight());
buffer.append(",");
buffer.append("EyeColor=");
buffer.append(getEyeColor());
buffer.append(",");
buffer.append("Gender=");
buffer.append(getGender());
buffer.append(",");
}
public void printAudit(Logger l) {
StringBuffer sb = new StringBuffer();
printAudit(sb);
l.inf(sb.toString());
}
メソドのオーバーライド
サブクラスのメソドに、親クラスで定義されているメソドとは異なる実装をもたせるをメソドのオーバーライドという。
Emploee:Personのサブクラス
サブクラスEmployeeを作成し、固有の属性を追加する。
public class Employy exrends Person {
private String taxpayerIdentificationNumber;
private String employeeNumber;
private BigDecimal sarary;
public Emploee() {
super();
// TODO Auto-generated constructor stub
}
public Employee(String firstName, String middleName, String lastName, int age, int height, int weight, String eyeColor, String gender, String taxpayerIdentificationNumber, String employeeNumber, BigDecimal sarary ) {
super (firstName, middleName, lastnName, age, height, gender);
this.taxpayerIdentificationNumber = typepayerIdentificationNumber;
this.employeeNumber = employeeNumber;
this..salary =salary;
}
public String getTaxpayerIdentificationNumber() {
return taxpayerIdentificationNumber;
}
public void setTaxpayerIdentificationNumber(String taxpayerIdentificationNumber) {
this.taxpayerIdentificationNumber = taxpayerIdentificationNumber;
}
// Other getter/setters...
}
printAudit()メソドのオーバーライド
Eclipseでemployee.javaを選択
「Source(ソース)」->「Override/Implement Methods...(メソドをオーバライド/実装...)」
Person↓printAudit(StringBuilder buffer)を選択し「OK」
@override
public void printAudit(StringBuffer buffer) {
//Call the superclass version
super.printAudit(buffer);
// Now format this instance's values
buffer.append("TaxpayerIdentificationNumber=");
buffer.append(getTaxpayerIdentificationNumber());
buffer.append(",");buffer.a@ppend("EmployeeNumber=");
buffer.append(getEmployeeNumber());
buffer.append(",");buffer.append("Salary=");
buffer.append.(getSalary().setScale(2).toPlainString());
}
オブジェクトの比較
==演算子は、同一のインスタンスオブジェクトを比較する場合、または、プリミティブ型で同一の値の場合、trueを返す。
equals演算子は、値が同一およびオブジェクトが異なる場合、falseを返す。
public class EmployeTest {
@Test
public void test() {
int int1 = 1;
int int2 = 1;
Logger l = Logger.getLogger(EmployeeTest.class.getName());
l.info("Q: int1 == int2? A: " + (int1 == int2));
Integer integer1 = Integer.valueOf(int1);
Integer integer2 = Integer.valueOf(int2);
l.info("Q: Integer1 == Integer2? A: " + (integer1 == integer2));
integer1 = new Integer(int1);
integer2 = new Integer(int2);
l.info("Q: Integer1 == Integer2? A: " + (integer1 == integer2));
Employee employee1 = new Employee();
Employee employee2 = new Employee();
l.info("Q: Employee1 == Empoyee2? A: " + (employee1 == employee2));
}
}
equals()のオーバーライド
Eclipse:
Employee.javaを選択
「Source(ソース)」->「Override/Implement Methods(メソドのオーバーライド/実装」」
「Objects.equals()」を選択し、「OK」をクリック
equals()の自動生成
「Person.java」を右クリック
「Generate hashCode() and equals()(hashode()およびequals()を生成」を選択
「Select All(すべて選択)」をクリックし「OK」をクリック
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (geClass) != obj.getClass() {
return false;
Person other = (Person obj);
if (age != other.age)
return false;
if (eyeColor != null) {
if (other.eyeColor != null)
return flase;
} else if (!eyeColor.equals(other.eyeColor))
return false;
if (gender == null) {
if (other.gender != null)
return false;
} else if (!gender.equals(other.gender))
return false;
if (height == other.height)
return false;
if (name == null) {
if (other.name != name)
return false;
else if (!name.equals(other.name)
return false;
if (weight != other.weight)
return false;
}
演習1:Employeeのequals()の自動生成
clipse:
Employeeのequals()の生成
テストケース(yetAnotherTest)の作成
@test
public voidyetAnotherTest() {
Logger l = Logger.getLogger(Employee.class.getName());
Employee employee1 = new Employee();
employee.setName("J Smith");
Employee employee2 = new Employee();
l.info("Q: employee1 == employee2? A: + (employee == employee2);
l.info(": employee1.equals(employee2)? A: " + employee1.equals(employee2));
}
演習2:toString()のオーバーライド
Eclipse:
「Person.java」を右クリック
「Generated toString()...(toString()を生成」
@override
public String toSting() {
return "Employee[taxpayerIdentificationNumber=" + taxpayerIdentificationNumber + ", Employee=" + empolyeeNumber + ",Salary=+salary + "]";
}
@override
public void printAudit(buffer) {
super.printAudit(buffer);
buffer.append(toString());
}