초급JAVA 11 - 상속, 오버라이딩, super, super(), 다형성

상속

  • 기존의 클래스를 물려받아 새로운 클래스를 만드는 것이다.
  • class 자식클래스명 extends 부모클래스명{}
  • 부모클래스의 생성자와 초기화블럭을 제외한 모든 멤버를 물려받는다.
  • 하나의 클래스만 상속받을 수 있다.
  • 상속받지 않는 모든 클래스는 Object 클래스를 상속받는다.
  • 자식클래스는 부모클래스의 멤버 외의 새로운 멤버를 가질 수 있으므로 자식클래스는 부모클래스보다 크거나 같다.
  • 두개 이상의 클래스를 만드는데 공통된 멤버가 있는 경우 부모 클래스로 만든다.

public class SampleParent {
String var;
{
var = "초기화 블럭은 돌려주지 않는다.";
}
SampleParent(){
var = "생성자도 물려주지 않는다.";
}
int method(int x, int y){
return x + y;
}
}

public class SampleChild extends SampleParent {
void childMethod(){
System.out.println(var); //상속받은 변수
System.out.println(method(7,13)); //상속받은 메서드
}

오버라이딩

  • 상속받은 내용을 다른 내용으로 바꾸고 싶을 때 메서드를 다시 생성하는 것
//오버라이딩 : 상속받은 메서드의 내용을 재정의 하는 것
@Override //어노테이션 : 클래스, 변수, 메서드 등에 표시해 놓는 것       
int method(int x, int y){ //부모클래스와 리턴타입, 메서드 , 파라미터 전부 다 똑같이 적고
	return x * y;         //내용만 다르게
}

super

  • 부모클래스와 자식클래스의 메서드 또는 변수의 이름이 중복될 때 구분하기 위해 사용함

super()

  • 생성자 안에서 부모 클래스를 호출할 때 사용함
 	//super, super()
	int var;
	
	void test(double var){
		System.out.println(var); //지역변수
		System.out.println(this.var); //인스턴스 변수
		System.out.println(super.var); //부모 클래스의 인스턴스 변수
		//super : 부모 클래스의 멤버와 자식클래스의 멤버가 이름이 중복될 때 둘을 구분하기 위해 사용한다.
		System.out.println(this.method(10, 20)); //내가 만든 메서드
		System.out.println(super.method(10, 20)); //부모 클래스에서 상속받은 메서드 
	}
	
	SampleChild(){
		super(); //부모 클래스의 생성자 호출
		//super()를 통해 클래스의 생성자를 호출하고 부모클래스의 인스턴스 변수도 초기화한다.
		//super()가 없으면 컴파일러가 자동으로 super()를 넣어준다.
	}

다형성

  • 부모타입의 변수를 가지고 자식타입 객체를 사용하는 것
	public static void main(String[] args) {
		SampleChild sc = new SampleChild(); //변수와 객체의 타입이 같음
		SampleParent sp = new SampleChild(); //변수와 객체의 타입이 다를 수 있다. (변수와 객체의 타입이 상속관계에 있어야 가능)
		//SampleChild2
		//SampleChild3
		
		//SampleParent : 멤버 2개
		//SampleChild : 상속받은 멤버 2개 + 4개 = 6개
		//sc = sp; //형변환 생략안됨 
		sc = (SampleChild)sp; //자식 타입으로 형변환해야함
        	//부모 -> 자식클래스는 자동 형변환 되지 않는다.
		sp = sc; //자동 타입 변환 : 형변환이 생략, 자식 -> 부모클래스는 자동 형변환이 가능하다.
		
	}

좋은 웹페이지 즐겨찾기