반응형

츄르사려고 코딩하는 코집사입니다.

츄르사려고 코딩하는 코집사입니다.


/**
 * 상속을 이해하기 위한 소스 코드
 * 상속 : 여러 클래스 사이에서 클래스의 역할의 중복되는 코드를 줄이기 위해 한 가지의 부모 클래스를 만들어 자식 클래스로 활용할 수 있게끔 만드는 것.
 * 상속은 부모 클래스를 만들어 놓고, 자식 클래스를 만들 때 자식 클래스에 없는 것을 extends 부모클래스를 하여 오버라이딩
 * 
 * 상속의 동작 과정
 * 1. 자식 클래스의 객체가 만들어지는 과정은
 * 2. 부모 클래스의 객체를 먼저 만들어 낸 후
 * 3. 거기에 이어붙여서 자식클래스의 객체를 완성시킨다.
 * 
 * super()는 부모클래스의 생성자를 호출
 * 만약에 부모클래스의 생성자에 매개변수가 있으면, 명시적으로 부모클래스를 호출해줘야 한다.
 * 부모클래스의 기본생성자가 없는 경우에는 자식클래스의 생성자에서 부모클래스의 생성자를 명시적으로 호출해줘야함.
 * 
 * 다형성 : 하나의 변수가 여러 개의 형태를 가질 수 있는 것을 말함
 * @author yong
 *
 */
class Parent{
	protected int data = 100;
	
	//Parent의 생성자
	public Parent() {
		System.out.println("Parent의 생성자");
	}
	
	public void printInfo() {
		System.out.println("Parent의 printInfo");
	}
}

class Child extends Parent{
	private int data = 200;
	
	//Child의 생성자
	public Child() {
		System.out.println("Child의 생성자");
	}
	
	public void func(int data) {
		System.out.println(data);
		System.out.println(this.data); // 이 클래스의 데이터
		System.out.println(super.data); // 부모클래스의 데이터
	}
	
	public void printInfo() {
		System.out.println("Child의 printInfo");
	}
}

public class Test {
	public static void main(String[] args) {
		//자식클래스의 객체를 만들 때는 부모클래스의 생성자가 호출이 된다.
		//자식클래스로 객체를 만들 때는 부모클래스를 먼저 만들고, 부모 클래스로 먼저 객체를 찍어내고, 거기에 이어붙여 자식클래스를 찍어내어 완성한다. 
		Child c = new Child(); // Parent의 생성자 Child의 생성자 출력
		c.func(10); // 10, 200, 100 출력
	}
}
/**
 * 다형성 : 하나의 타입의 변수가 여러 개의 형태를 가질 수 있는 것을 말함
 * 
 * 다형성이 가능한 이유 : 부모 타입의 참조 변수가 자식 형태의 객체를 참조할 수 있음.
 * 
 * 오버로딩 : 함수 이름은 같은데 매개변수의 유형과 갯수가 다른 것
 * 오버라이딩 : 하위 클래스에서 재정의
 * @author yong
 *
 */

//아무것도 상속받지 않으면 아래의 Parent 클래스는
//class Parent extends Object로 자동으로 Default 된다.

class Parent{
	
	protected int data = 100;
	
	//Parent의 생성자
	public Parent() {
		System.out.println("Parent의 생성자");
	}
	
	public void printInfo() {
		System.out.println("Parent의 printInfo");
	}
}

class Child extends Parent{
	private int data = 200;
	
	//Child의 생성자
	public Child() {
		System.out.println("Child의 생성자");
	}
	
	public void func(int data) {
		System.out.println(data);
		System.out.println(this.data); // 이 클래스의 데이터
		System.out.println(super.data); // 부모클래스의 데이터
	}
	
	public void printInfo() {
		System.out.println("Child의 printInfo");
	}
}

public class 다형성 {
	public static void main(String[] args) {
		//Parent p = new Parent();도 될 수 있다.
		//Object p = new Child();도 될 수 있다.
		Parent p = new Child();
		//p.func(); 는 에러난다.
		//p는 자식클래스에서 부모클래스 부분을 바라보기 때문에 그 부모클래스 부분에는 func()가 없다.
		
		p.printInfo(); // Parent 클래스에 printInfo가 있어 가능
		System.out.println(p.data); // 100 출력
		
	}
}


반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기