상속의 특징

16576 단어 자바자바

상속의특징

메서드 오버라이드

  • 부모 클래스의 기능을 자식 클래스에서 재정의 해서 사용
  • 자식클래스에서 부모클래스의 메서드와 동일한 이름의 메서드를 만들어서 사용할 수 있음
    • 기존 부모 클래스의 메서드의 기능을 덮어쓰게 됨
// 부모클래스
package inheritanceTest;

public class ParentClass {
	
	public ParentClass() {
		System.out.println("ParentClass constructor");
	}
	
	public void OverrideTest() {
		System.out.println("Parent method");
	}
}
// 자식클래스 
package inheritanceTest;

public class ChildClass extends ParentClass{

	public ChildClass() {
		System.out.println("ChildClass constructor");
	}
	// 부모클래스의 메서드와 동일한 이름으로 메서드 오버라이드
    // Override 어노테이션을 붙여줘서 좀더 명확히 알아볼 수 있게 만들어줌
    @Override
	public void OverrideTest() {
		System.out.println("overide child method");
	}
}
package inheritanceTest;

public class MainClass {
	
	public static void main(String[] args) {
		
		ChildClass child = new ChildClass();
		
		child.OverrideTest();
		
	}

}
// 결과
/*
ParentClass constructor
ChildClass constructor
overide child method
*/
// 자식 클래스에서 오버라이드한 결과가 나오는 것을 확인 할 수 있음

자료형(타입)

  • 클래스도 자료형임!
  • 정의한 클래스의 이름은 데이터 타입으로 이용된다
// 부모클래스
package inheritanceTest;

public class ParentClass {
	
	public ParentClass() {
		System.out.println("ParentClass constructor");
	}
	
	public void OverrideTest() {
		System.out.println("Parent method");
	}
}
// 자식클래스 1 (동일한 부모 공유)
package inheritanceTest;

public class FirstChildClass extends ParentClass{

	public FirstChildClass() {
		System.out.println("FirstChildClass constructor");
	}
	
	@Override
	public void OverrideTest() {
		System.out.println("overide FirstChildClass method");
	}
}
// 자식클래스 2 (동일한 부모 공유)
package inheritanceTest;

public class SecondChildClass extends ParentClass{

	public SecondChildClass() {
		System.out.println("SecondChildClass constructor");
	}
	
	@Override
	public void OverrideTest() {
		System.out.println("overide SecondChildClass method");
	}
}
// main
package inheritanceTest;

public class MainClass {
	
	public static void main(String[] args) {
		
		// 자식 클래스의 객체의 데이터 타입은 부모 클래스 여도 상관 없다
		// 왜냐하면 상속받은것이기 때문에
		// 물론 자식 클래스를 데이터 타입으로 사용해도 상관 없다
		ParentClass firstchild = new FirstChildClass();
		ParentClass secondchild = new SecondChildClass();
		
		ParentClass[] pArr = new ParentClass[2];
		
		// 배열에 할당한 두 객체는 서로 다른 클래스로 부터 생긴 객체이다
		// 하지만 같은 부모 클래스를 상속하기 때문에 데이터 타입으로 통일시킬수 있음
		// 따라서 같은 배열안에 담길 수 있는 것임
		// 만약 위에서 객체의 타입을 각각의 자식 클래스로 선언했어도 가능하다
		// 여전히 동일한 부모로부터 상속받기 때문이다
		pArr[0] = firstchild;
		pArr[1] = secondchild;
		
		for (int i = 0; i < pArr.length; i++) {
			pArr[i].OverrideTest();
		}
	}

}

Object 클래스

  • 모든 클래스의 최상위 클래스는 Object 클래스임

  • 상속을 받지 않는 클래스이더라도

    • 예제의 경우 ParentClass
  • Object 클래스를 상속받고 있다.

    • 이클립스에서 클래스를 드래그 하고 ctrl+t를 누르면 상속관계를 확인할 수 있음
  • 따라서 객체의 데이터 타입을 Object로 맞춰주면 데이터 타입을 통일 시킬 수 있음

super 클래스

  • 상위 클래스를 호출할 때 super 키워드를 이용

  • this는 현재 내가 갖고있는 객체를 가리킬때 사용

  • super는 상위 클래스로 올라가라는 얘기 즉, 상위 클래스의 객체를 가리킬때 사용

// 부모클래스
package inheritanceTest;

public class ParentClass {
	
	int num = 10;
	
	public ParentClass() {
	
    }
	
}
// 자식클래스package inheritanceTest;public class FirstChildClass extends ParentClass{	int num = 20;		public FirstChildClass() {			}		public void getSuper() {		System.out.println("this int = " + this.num);		System.out.println("super int = " + super.num);	}    }
// mainpackage inheritanceTest;public class MainClass {		public static void main(String[] args) {				FirstChildClass c = new FirstChildClass();				c.getSuper();			}}/*this int = 20super int = 10*/

좋은 웹페이지 즐겨찾기