재정의하려는 경우이 정적을 유지 해야하는 유효한 이유가 표시되지 않습니다. 추상화 사용을 제안합니다 (예제 코드 참조). :
public interface Person {
public abstract String getName();
//this will be different for each person, so no need to make it concrete
public abstract void setName(String name);
}
이제 아빠를 추가 할 수 있습니다 :
public class Dad implements Person {
private String name;
public Dad(String name) {
setName(name);
}
@Override
public final String getName() {
return name;
}
@Override
public final void setName(String name) {
this.name = name;
}
}
아들:
public class Son implements Person {
private String name;
public Son(String name) {
setName(name);
}
@Override
public final String getName() {
return name;
}
@Override
public final void setName(String name) {
this.name = name;
}
}
그리고 아빠는 좋은 여자를 만났다 :
public class StepMom implements Person {
private String name;
public StepMom(String name) {
setName(name);
}
@Override
public final String getName() {
return name;
}
@Override
public final void setName(String name) {
this.name = name;
}
}
우리는 가족이있는 것처럼 보이고 세상에 그들의 이름을 알려줍니다.
public class ConsoleGUI {
public static void main(String[] args) {
List<Person> family = new ArrayList<Person>();
family.add(new Son("Tommy"));
family.add(new StepMom("Nancy"));
family.add(new Dad("Dad"));
for (Person person : family) {
//using the getName vs printName lets the caller, in this case the
//ConsoleGUI determine versus being forced to output through the console.
System.out.print(person.getName() + " ");
System.err.print(person.getName() + " ");
JOptionPane.showMessageDialog(null, person.getName());
}
}
}
System.out 출력 : Tommy Nancy Dad
System.err는 위와 동일합니다 (빨간색 글꼴이 있습니다)
JOption 출력 :
Tommy ,
Nancy ,
Dad