JAVA 16강

YEONG EUN LEE (Chloe)·2023년 12월 26일

JAVA 기초

목록 보기
21/42
post-thumbnail

상속 ( Inheritance)

--> 메모리 낭비와 관련
: 확장(extends). 실체화(실제화)(Implements, realization),

클래스급 이상(클래스, 추상클래스, 인터페이스)인 경우는 형변환은 반드시 상속관계에서만 형변환이 가능하다.
아니면 String <=> Wrapper클래스간 메소드를 이용한 형변환만 가능하다.

부모에게서 물려받은 것을 자식에게서도 사용할 수 있도록 하는 것

-부모 : Super, 상위, 기본

-자식 : Sub, 하위, 파생

형식 :

// 독립적
class Pa{

	int a;
	public void setA(int a){
	this.a = a;
	}
}

class Cha{
	int b;
	public void setB(){
	this.b = b;
	}
}


// 상속
class Pa{

	int a;
	public void setA(int a){
	this.a = a;
	}
}

class Cha extends Pa{
	int b;
	public void setB(){
	this.b = b;
	}
}

Pa a(부모) = new Pa()(자식); // 성립 
Pa p = new Cha(); // 성립 ---> 자료형 2개 가지고 있음. 다형성임.// 속성은 부모, 메소드는 자식
// object 최고 부모의 자료형.
// p는 Pa ,Cha, Object의 자료형을 가지고 있음.
Cha1 c =  new cha1(); // 성립
Cha1 c = new Pa(); // 안 성립

1) 확장(extends) : 반드시 부모와 자식이 동급이 경우

(인터페이스 - 클래스 X, 추상 클래스 - 클래스 O)
예시 : 부모(클래스), 자식(클래스) / 부모(인터페이스), 자식(인터페이스)

public class ChildrenClass(예가 주체임) extends ParentClass{ }

public interface ChildrenInterface extends ParentInterface{ }

2) 실체화(implements) : 부모와 자식이 급이 다른 경우, 인터페이스는 클래스를 상속받지 못함.

public class ChildrenClass implements ParentInterface{ }

cha cha case
pa cha case
pa cha case explanation

class AA{ // 부모, Super, 상위, 기본 클래스
	int i;
	int j;
	int z = 5;
	
	public void setij(int x, int y) { // 이름이 같다는 것은 메소드명과 매개변수명까지도 같다는 것임.
		System.out.println("상위");
		i =x;
		j = y;
	}
	
	public void printI() {
		System.out.println("상위 : " + z);
	}
}

class BB extends AA{ // 자식, Sub, 하위, 파생 클래스
	int total;
	String z = "테스트";
	
	public void sum() {
		total = i + j;
	}
	
	public void setij(int x, int y) { // 이름이 같다는 것은 메소드명과 매개변수명까지도 같다는 것임.
		System.out.println("하위");
		i =x+5;
		j = y+5;
 }
	
	public void printI() {
		System.out.println(z);
	}
}
public class Inh_Ex01 {

	public static void main(String[] args) {
//		BB subOb = new BB(); // 부모자식 모두 사용 가능
//		
//		subOb.setij(10,12);
//		subOb.sum();
//		System.out.println("합계 : " + subOb.total);
		
		AA subOb = new BB(); // 이름이 다를 경우, 부모는 자식 것을 사용할 수 없음.
		
		subOb.setij(10,12);
//		subOb.sum();
//		System.out.println("합계 : " + subOb.total);
		System.out.println("i : " + subOb.i);
		System.out.println("j : " + subOb.j);
		subOb.printI();
		System.out.println("z의 값: " + subOb.z);

	}

}

다형성 (polymorphism)

: 하나의 객체가 여러개의 자료형을 가지고 있는 것을 말함. => 상속, 형변환 => 메모리 낭비를 줄일 수 있다.

Pa p = new Cha();
같은 이름이던, 다른 이름이던 동일
속성 : 부모것만
메소드 : 자식것만(동일이름인 경우)
동일 이름이 아닌 경우 => 부모것만

Cha c = new Cha();

  • 다른 이름인 경우
    속성 : 부모 것, 자식 것 모두 사용
    메소드 : 부모것, 자시것 모두 사용

  • 동일 이름인 경우
    속성 : 자식것만
    메소드 : 자식것만

동일한 메소드로 여러개를 사용하고 싶을 때, (멤버필드 제외)
Pa p = new Cha();
p = new cha1();
p = new cha2();



0개의 댓글