
--> 메모리 낭비와 관련
: 확장(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{ }



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);
}
}
: 하나의 객체가 여러개의 자료형을 가지고 있는 것을 말함. => 상속, 형변환 => 메모리 낭비를 줄일 수 있다.
Pa p = new Cha();
같은 이름이던, 다른 이름이던 동일
속성 : 부모것만
메소드 : 자식것만(동일이름인 경우)
동일 이름이 아닌 경우 => 부모것만
Cha c = new Cha();
다른 이름인 경우
속성 : 부모 것, 자식 것 모두 사용
메소드 : 부모것, 자시것 모두 사용
동일 이름인 경우
속성 : 자식것만
메소드 : 자식것만
동일한 메소드로 여러개를 사용하고 싶을 때, (멤버필드 제외)
Pa p = new Cha();
p = new cha1();
p = new cha2();


