반응형
빈 인터페이스 (구분자)
디폴트메소드와 static 메소드
package default_method;
public class DefaultMethod_Ex {
public static void main(String[] args) {
//인터페이스에서도 디폴트 메소드를 통해서 간접접근하여 사용할수 있다
MyInterface m1 = new ClassA();
//클래스A에서 정의한 메소드
m1.method1();
//메소드2는 인터페이스에서 만들어 놓은 디폴트 메소드
m1.method2();
//인터페이스에서도 디폴트 메소드를 통해서 간접접근하여 사용할수 있다
MyInterface m2 = new ClassB();
//클래스B에서 정의한 메소드
m2.method1();
//클래스B의 메소드2는 오버라이딩
m2.method2();
//인터페이스에서 직접 접근 static 메소드
MyInterface.method3();
}
}
//인터페이스
package default_method;
public interface MyInterface {
public void method1();
//디폴트메소드
public default void method2() {
System.out.println("내 인터페이스 메소드2 실행중이얌");
}
//스테이틱
static void method3() {
System.out.println("내 인터페이스 메소드3 실행중이얌");
}
}
//클래스 A
package default_method;
public class ClassA implements MyInterface {
//디폴트 메소드는 상속과 같은 개념으로 여기에 안적었지만 실제로 있다
@Override
public void method1() {
System.out.println("클래스A의 메소드1 실행중이얌");
}
}
//클래스 B
package default_method;
public class ClassB implements MyInterface{
@Override
public void method1() {
System.out.println("클래스B의 메소드1 실행중이얌");
}
@Override
public void method2() {
System.out.println("클래스B의 메소드2 실행중이얌");
}
}
내부클래스 (inner )
클래스 내부에 클래스를 정의하는 것
인스턴스 내부 클래스 : 가장 일반적인 형태로 클래스 내부에 클래스를 선언한 것
내부클래스의 객체를 생성하기 위해서는 반드시 외부클래스 객체 필요
이렇게 생성하게 되면 A클래스 속에 B클래스가 생성이 되고 B클래스는 A클래스 로밖에 접근이 안된다
정적 내부 클래스 : static 키워드를 사용한 내부클래스
정적 내부 클래스는 static 키워드가 선언부에 같이 사용 되므로 인스턴스화 없이 사용이 가능하다
지역 내부 클래스 : 메소드 내부에 클래스를 선언한 것으로 메소드 내부에서만 유효하다
익명 내부 클래스 : 선언과 동시에 만들어짐 일회용이다
코드 예시
package innerClass;
public class A { // Outter 클래스
A() {
System.out.println("A객체가 생성됨");
}
int num = 0;
static int sum = 0;
public class B { // 인스턴스 내부 클래스
B() {
System.out.println("B객체가 생성됨");
}
int field1;
// static int field2; // 이너클래스에서는 아직 객체가 생성되지 않아서 안의 멤버필드가 static일 수 없다.
void method1() {
}
// static void method2() {} // 이너클래스에서는 아직 객체가 생성되지 않아서 안의 멤버메소드가 static일 수 없다.
int tot = num; // 외부 클래스의 멤버 접근 가능
// num = 3; // 외부 클래스의 멤버의 값 수정은 불가능(오류남)
}
static class C { // 정적 내부 클래스
C() {
System.out.println("C객체가 생성됨");
}
int field1;
static int field2;
void method1() {
}
static void method2() {
}
// int tot = num; // 외부 클래스가 인스턴스화 되지 않았기 때문에 오류(내부 클래스만 인스턴스화 되었기 때문)
}
void method() { // 지역 클래스
int tot = 0;
class D {
D() {
System.out.println("D객체가 생성됨");
}
int field1;
// static int field2; 내부 클래스까지 static 확인하지 않아서 오류
int method_D() {
return field1;
}
}
tot++;
D d = new D();
d.field1 = 3;
System.out.println(d.method_D());
}
}
출력상황
오후에 정신없이 나와서 위 코드는 받아서 이해 하다보니까 초금 어렵네~? ㅋㅋ
화요일날 가서 복습할때 확실하게 이해 하고 넘어가도록 하자~~
반응형
'아옳옳의 코딩공부 > 아옳옳 자바코딩공부' 카테고리의 다른 글
2021-04-05 자바공부 (예외처리) (0) | 2021.04.05 |
---|---|
2021-02-28 자바공부 (String 클래스) (0) | 2021.02.28 |
2021-02-25 자바공부 (abstract 클래스 , interface) (0) | 2021.02.25 |
2021-02-24 자바공부 (상속4 상속을 사용한 안드로이드 작업) (0) | 2021.02.24 |
2021-02-23 자바공부 (상속3 이해 , 상속의 사용목적) (0) | 2021.02.23 |