Overridding, 재정의
Overridding
- 부모의 멤버를 은닉
- 부모 + 내꺼
- 동적바인딩...★
public class AA {
private String str;
public AA(){
}
public AA(String a){
str=a;
}
public void setStr(String str){
this.str=str;
}
public String getStr(){
return str;
}
}
Use 1
public class DD extends AA{
public String getStr(){ // Overridding, 부모것을 숨기기위해 똑같이 만듬
return "superman&batman";
}
public static void main(String[]args){
DD dd=new DD();
dd.setStr("pororo"); // 읭? pororo는 출력안됨 -> 부모보다 내것이 먼저(부모것 은닉)
System.out.println(dd.getStr()); // superman&batman 출력
}
}
Use 2
public class DD extends AA{
public String getStr(){
return super.getStr()+"&batman"; // super를 통해 상속 받은 부모멤버접근
}
public static void main(String[]args){
DD dd=new DD();
dd.setStr("pororo");
System.out.println(dd.getStr()); // pororo&batman 출력
}
}
public class EE {
public String toString() {
return "JAVA";
}
public static void main(String[] args) {
EE ee = new EE();
System.out.println(ee.toString()); // JAVA 출력
String str = new String("Superman"); // EE의 부모 클래스 String 클래스가 오버라이딩 되어서,
System.out.println(str.toString()); // Superman 출력
}
}
class Super {
Super() {
}
void f1() {
System.out.println("f1()called");
}
void f3() {
System.out.println("superclass f3() called");
}
void f5() {
f1();
f3(); // 부모클래스에서 f3( )을 불러도 오버라이딩 된 자식 클래스의 메소드가 불려진다.
}
}
public class Sub extends Super {
Sub() {
}
void f2() {
System.out.println("f2()called");
}
void f3() {
System.out.println("subclass f3()");
}
void f4() {
f1();
f2();
f3();
}
public static void main(String[] args) {
Sub d = new Sub();
d.f5();
}
}