본문 바로가기
java

상속_(생성자, 오버라이딩)

by 신방동불주먹 2022. 10. 4.

상속관계에서의 생성자 특징

 

1. 부모생성자를 호출 해야한다.

2. 호출시에 super()메소드를 사용한다.

3. 기본생성자인 경우 부모생성자의 기본 생성자를 호출한다.

4. 생성자는 상속되지 않는다. (멤버 변수, 메소드만 상속되어짐)

5. super()메소드는 반드시 첫번째 줄에 있어야 한다.

 

- 어떤 클래스도 상속받지 않은 클래스는  기본 Object 클래스를 상속받고 있다.

 

 

오버라이딩


1. 상속구조에 사용한다.

2. 부모 메소드인 선언부가 동일해야한다.(리턴타입포함)
3. 매개변수도 같아야 한다
4. 부모에게 상속 받은 메소드 실행문을 재정의하여 사용 
5. 부모의 메소드를 사용할때는 super라는 키워드를 사용한다.

 

 

 

 

package com.java.print;
//1004 상속1-오버라이딩2
public class Print3D extends Print {
	int z;
	
	//상속에서의 생성자의 특징
	//1. 부모생성자를 호출 해야한다. 
	//2. 호출 시에 super()메소드를 사용한다.
	//3. 기본생성자인 경우 부모생성자의 기본생성자를 호출한다. 
	//4. 생성자는 상속되지 않는다.(멤버 변수, 메소드만 상속되어짐)
	//5. super()메소드는 반드시 첫번째 줄에 있어야함.
	
	
//	Print3D(){ //생략된 기본 생성자
//		super(10,20); //Print(int x,int y) 를 호출하는 구조  //부모클래스 Print(){} 생성자를 반드시 호출해야 한다
//		this.z = 30; //자식 생성자 초기화
//	}
	
	//1004 ---3 생성자
	public Print3D(int x, int y,int z){ //위 생성자 오버로딩 가능
		super(x, y);
		//this.x = 100; //원하면 자식 클래스에서 초기화 할 수 있으나 잘 안씀. 부모클래스의 x,y 와 같은 주소값을 가지고 있음
		//this.y = 200; 
		this.z = 30;
	}
	//부모생성자에서 생성자를 이미 호출한 경우 기본생성자를 사용 할 수 없음. 부모 생성자에 맞는 매개변수 필요하다.
	
	
	//오버라이딩 : 
	//- 상속구조에 사용한다.
	//- 부모 메소드인 선언부가 동일해야한다.(리턴타입포함)
	//- 매개변수도 같아야 한다
	//- 실행문은 재정의 한다.
	//부모의 메소드를 사용할때는 super라는 키워드를 사용한다.
	
	public String getLocation() { //오버라이딩(메소드의 재정의)
		//return "x : " + x + "y : " + y +"z : " + z;
		return super.getLocation() + " z : " + z;//부모메소드에 직접 접근할 때 super를 사용 (상속받은 자식 클래스에서만 사용 가능)
	}											//부모 메소드와 자신 메소드를 동시에 사용
}
package com.java.print;
//1004 상속1-오버라이딩2
public class Print {
	public int x; //외부 패키지에서 사용할 땐 다 public 상태여야함.
	public int y;
	

//원래 기본생성자에는 super가 포함되어있어 상위 클래스(Object 크래스)의 생성자를 호출한다. 	
	//Print(){
	// super();
	// }
	
	public Print(int x, int y) {
		this.x = x;
		this.y = y;
	}
	
	
	public String getLocation() {
		return "x : " + x + " y : " + y;
	}
}
package com.java.print;

public class Print3DTest {
	public static void main(String[] args) {
//	Print3D p3 = new Print3D(); //Print3D() -> Print() -> Object() 순서로 호출 생성은 반대구조
//		
//	p3.x = 10;
//	p3.y =20;
//	p3.z = 30;
	
//	String point = p3.getLocation();
//	System.out.println(point);
		
	//명시적으로 생성자를 호출

		//Print3D p3 = new Print3D(); //Print3D 기본생성자를 없앴기 때문에 값을 넣어줘야함
		Print3D p3 = new Print3D(10,20,30);
		String point = p3.getLocation();
		System.out.println(point);
}
}

 

package com.java.tv;

import com.java.print.Print3D;

//다른패키지 사용시 출처 
//import com.java.print.*;
//import com.java.print.Print; //마지막 Print 클래스명
//import com.java.print.Print3D;
//ctrl + shift + o -> import

//1004 상속
public class Tv { //패키지가 다른경우 클래스 접근제한자가 public으로 되어있어야 함.
				//생성자앞에 public 붙혀줘야함.
//관계를 맺을 때 상속과 포함을 하나의 클래스에 적용할 수 있다
	
	//다른 패키지의 클래스 사용 //인스턴스 멤버변수, 포함관계 
	//Print print = new Print(10,30); 
	Print3D print = new Print3D(10,20,30);
	
	
	boolean power;
	int channel;

	void power() {
		power = !power;
	}
	void channelUp(){
		++channel;
	}
	void channelDown(){
		--channel;
	}
}
package com.java.tv;
//1004 상속
public class VCR {
	boolean power;
	int counter = 0;

	void power() {
		power = !power;
	}
	void play() {
		
	}
	void stop() {
		
	}
	void rew(){
		
	}
	void ff(){
		
	}
	
	
	
	
	
}
package com.java.tv;
//1004 상속
//tv, vcr 다 되는 제품 
public class TVCR extends Tv{ //상속

	VCR vcr = new VCR(); //포함
	
	//어떤 클래스도 상속받지 않은 클래스는 항상 extends Object가 생략되어있다. 
	
}
package com.java.tv;

public class TVCRTest {

	public static void main(String[] args) {
		TVCR tvcr = new TVCR();
		String print = tvcr.print.getLocation();
		System.out.println(print);
	}

}

'java' 카테고리의 다른 글

상속(private_정보은닉)  (0) 2022.10.05
상속(접근제어자)  (0) 2022.10.04
Mac_jdk 환경 변수 설정하기  (0) 2022.10.02
Java - Open JDK 1.8 설치  (0) 2022.10.01
0929_클래스 구성(연습)  (0) 2022.09.29