자바 내부 클래스 익명 내부 클래스
6909 단어 android
1. 유형의 내부 에서 내부 류 는 일반 류 와 다 르 지 않다.
2. 내부 클래스 는 외부 클래스 의 구성원 을 방문 할 수 있 습 니 다.
3. 외부 클래스 대상 참조 생 성: 외부 클래스 이름. this
다른 클래스 에 내부 클래스 인 스 턴 스 만 들 기: 외부 클래스 인 스 턴 스 이름. new + 내부 구조 함수
[java] view plain copy print ?
public class DotThis {
public class Inner {
return DotThis. this; / / 외부 클래스 참조 생 성
}
public static void main(String[] args) {
DotThis.Inner dti = dt.inner();
}
public static void main(String[] args) {
DotThis.Inner dti = dt.new Inner (); / 다른 클래스 에서 내부 클래스 인 스 턴 스 를 만 듭 니 다.
}
public class DotThis {
void f() { System.out.println("DotThis.f()"); }
public class Inner {
public DotThis outer() {
return DotThis.this;//
}
}
public Inner inner() { return new Inner(); }
public static void main(String[] args) {
DotThis dt = new DotThis();
DotThis.Inner dti = dt.inner();
dti.outer().f();
}
}
public class DotNew {
public static void main(String[] args) {
DotThis dt = new DotThis();
DotThis.Inner dti = dt.new Inner();//
}
}
4. 임의의 방법 이나 역할 영역 에서 내부 클래스 를 정의 할 수 있 습 니 다.
익명 내부 클래스:
1. 정의:
[java] view plain copy print ?
public class Parcel7 {
return new Contents() {/ / 익명 내부 클래스 정의
public int value() { return i; }
}
Parcel7 p = new Parcel7();
System.out.println(c.value());
}
public class Parcel7 {
public Contents contents() {
return new Contents() {//
private int i = 11;
public int value() { return i; }
};
}
public static void main(String[] args) {
Parcel7 p = new Parcel7();
Contents c = p.contents();
System.out.println(c.value());
}
}
2. 익명 내부 클래스 의 계승:
[java] view plain copy print ?
abstract class Base { //기준 클래스
System.out.println("Base constructor,i =" + i);
public abstract void f();
public class AnonymousConstructor {
return new Base(i) {/ / 기본 구조 함수 호출
public void f() {
}
}
Base base = getBase(12);
}
abstract class Base { //
public Base(int i) {// ,
System.out.println("Base constructor,i =" + i);
}
public abstract void f();
}
public class AnonymousConstructor {
public static Base getBase(int i) {
return new Base(i) {//
{System.out.println("Inside instance initializer");}// , ,
public void f() {
System.out.println("In anonymous f()");
}
};
}
public static void main(String[] args) {
Base base = getBase(12);
base.f();
}
}
출력:
[java] view plain copy print ?
Base constructor,i =12 //먼저 기본 구조 함수 호출
In anonymous f()
Base constructor,i =12 //
Inside instance initializer
In anonymous f()
주: 익명 내부 클래스 에서 외부 정의 대상 을 사용 하여 매개 변 수 를 final 형식 으로 참조 하도록 요구 합 니 다. 다음 과 같 습 니 다.
[java] view plain copy print ?
public class Parcel10 {
return new Destination() {
{
if(cost > 100) {
}
private String label = dest; //dest 파이 널
};
public static void main(String[] args) {
Destination d = p.destination("Tasmania", 101.395F);
}"COLOR: #993300">
public class Parcel10 {
public Destination destination(final String dest, final float price) {
return new Destination() {
private int cost;
{
cost = Math.round(price); //price final
if(cost > 100) {
System.out.println("Over Budget!");
}
}
private String label = dest; //dest final
public String readLabel() { return label; }
};
}
public static void main(String[] args) {
Parcel10 p = new Parcel10();
Destination d = p.destination("Tasmania", 101.395F);
}
}
그렇지 않 으 면 오류 가 발생 합 니 다: 내부 클래스 에서 부분 변수 dest 에 접근 합 니 다. 최종 형식 으로 밝 혀 져 야 합 니 다.
3. 익명 내부 클래스 의 제한: 하나의 인터페이스 나 계승 클래스 만 실현 할 수 있 습 니 다.
끼 워 넣 기 클래스:
1. 내부 클래스 는 static 로 수식 할 때 끼 워 넣 는 클래스 입 니 다.
2. 끼 워 넣 기 클래스 를 만 들 려 면 외곽 대상 이 필요 없습니다.
3. 포 함 된 클래스 에서 비 정적 외곽 대상 에 접근 할 수 없습니다.
4. 일반 내부 클래스 는 static 데이터 와 필드 를 포함 할 수 없고, 끼 워 넣 는 클래스 도 있 을 수 없습니다. 그러나 끼 워 넣 는 클래스 는 이 모든 것 을 포함 할 수 있 습 니 다.
마지막 으로 내부 류 의 역할 을 말 해 보 자.
1. 다 중 상속 실현
2. 반전 의 실현
3. 프레임 제어...
참고: thinking in java
간단 한 것 을 베 꼈 는데 잘 이해 하지 못 하고 못 쓰 는 경우 가 많 습 니 다. 앞으로 더 깊이 볼 수 있 었 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.