public class Main {
	public static void main(String[] args) {
		System.out.println("=================생성자테스트=================");
        Child c1 = new Child();
        Child c2 = new Child("1");
        
        System.out.println("====================생성자테스트2=================");
        Parent p1 = new Child();
        Parent p2 = new Child("2");
        
        System.out.println("====================생성자테스트3=================");
        GrandParents gp1 = new Child();
        GrandParents gp2 = new Child("3");
        
        System.out.println("=================상속 중복 정의 테스트==================");
        
        Child c3 = new Child();
        System.out.println("c3 str = " + c3.pStr);
        
        Child c4 = new Child("4");
        System.out.println("c4 str = " + c4.pStr);
        
        Parent p3 = new Child();
        System.out.println("p3 str = " + p3.pStr);

        Parent p4 = new Child("5");
        System.out.println("p4 str = " + p4.pStr);
        
        GrandParents g1 = new Child();
        System.out.println("g1 str = " + g1.pStr);

        GrandParents g2 = new Child("6");
        System.out.println("g2 str = " + g2.pStr);
        
        GrandParents g3 = new Parent();
        System.out.println("g3 str = " + g3.pStr);

        GrandParents g4 = new Parent("7");
        System.out.println("g4 str = " + g4.pStr);

        GrandParents g5 = new GrandParents();
        System.out.println("g5 str = " + g5.pStr);

        GrandParents g6 = new GrandParents("8");
        System.out.println("g6 str = " + g6.pStr);
	}
}

class GrandParents {
    String pStr = "grand parents";
    
    GrandParents() {
        System.out.println("GrandParents()");
    }
    GrandParents(String str) {
        System.out.println("GrandParents str생성자");
    }
}
 
class Parent extends GrandParents {
    String pStr = "parents";
    
    Parent(){
        System.out.println("Parent 생성자");
    }
    Parent(String str){
        System.out.println("Parent str생성자");
    }
}
 
class Child extends Parent{
    String pStr = "child";
    
    Child(){
        System.out.println("Child 생성자");
    }
    Child(String str){
        System.out.println("Child str생성자");
    }
}

 

생성자와 변수 데이터는 메소드 오버라이딩과 결과가 조금 달랐다.

메소드 오버라이딩은 자식 클래스에 오버라이딩이 돼 있으면 부모 클래스에서 같은 메소드명을 호출해도 자식 클래스의 메소드를 우선 호출했다. 하지만 생성자와 변수 데이터는 변수 타입을 많이 따라간다는 생각이 들었다.

Posted by 知彼知己百戰不殆
,