같은 default method가 있으면 구현 클래스에서 재정의해주어야 한다.
구현클래스가 두개이상의 인터페이스를 구현할 경우
형변환 하여 호출시, 캐스팅된 인터페이스 내의 메서드만 인스턴스화 되어 사용할 수 있다.
package ex4;
public class MyClassTest {
public static void main(String[] args) {
MyClass mClass = new MyClass();
X xClass = mClass;
xClass.x(); //x 로 형변환함으로 x 만 호출
Y yClass = mClass;
yClass.y();
MyInterface iClass = mClass; //인터페이스를 인스턴스화
iClass.myMethod(); //인터페이스는 다중상속(x,y)받았음으로 모두 접근 가능
iClass.x();
iClass.y();
}
}
heap영역 : 참조변수 관련, 객체(인스턴스)
static 영역 : 전역변수, 정적변수 선언관련
stack 영역 : 기본자료형에 해당하는 지역변수 영역(메서드 관련)
실제 데이터를 갖고 있는 힙 영역의 참조값을 스택영역의 객체가 갖고 있다.

상속시 :
Parent a3 = new A() 에서 A는 자식
부모타입으로 자식의 객체를 생성하는 경우이다.
이 경우
static : (설계도) 부모타입만 올라감
stack : a3만 존재
heap : 부모, 자식 객체가 모두 올라가있음
일반적으로 부모 타입만 참조하여 호출 할 수 있으나(heap)
자식타입을 호출할려면
(A)a3로 캐스팅하여 사용
부모의 메서드가 자식의 메서드를 자동 으로 호출하는데 이것을 vmi라고 한다.
(자식이 부모 메서드를 오버라이딩 했을 시)
[JAVA/자바] 메모리 구조(static, stack, heap)

추상클래스 : 클래스간 계층 관계를 정립하기 위함
인터페이스 : 기능적 정의를 구현하기 위해 스펙을 적어놓은 곳
ex)다크모드를 클릭하면 전체 ui가 바뀌는 것처럼 → 하나를 바꾸게 되면 전체 기능에 적용 되어 바뀜
ex) oracle, mysql, postrgesql 의 dao 가 명세된 인터페이스가 있다. 인터페이스만 바꿔주면 해당 db에 접속 할 수 있음 → 인터페이스만 변경되었지만 기능이 모두 바뀌기 때문에 사용 가능