Java 내부 클래스 분석
주요 결론:
일반 내부 클래스와 정적 내부 클래스
가장 뚜렷한 특징은 static로 수식할지 여부이다
public class OutterClass {
//
class InnerClass{
}
//
static class InnerClass2{
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
주의: 정적 내부 클래스 앞에는static로 수식됩니다.일반 내부 클래스 일반 내부 클래스는 외부 클래스의 모든 구성원을 직접 방문할 수 있고 정적 내부 클래스는 비static 속성의 구성원을 직접 방문할 수 없으며 외부 대상의 인용을 사용해야 접근할 수 있습니다.
다음은 일반 내부류와 정적 내부류의 실례화이다. 일반 내부류는 외부류의 실례를 이용하여 상응하는 내부류의 실례화를 해야 한다. 정적 내부류는 직접 실례화를 할 수 있다.
public class OutterClass {
private int a = 10;
private static int b = 11;
//
class InnerClass{
void print(){
// private
System.out.println(a);
}
}
//
static class InnerClass2{
void print(){
// static
//System.out.println(a);
// static
OutterClass out = new OutterClass();
System.out.println(out.a);
// static
System.out.println(b);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
// InnerClass2
InnerClass2 in2 = new InnerClass2();
in2.print();
//
InnerClass in = new OutterClass().new InnerClass();
in.print();
}
}
국부 내부 클래스와 익명 내부 클래스
국부 내부 클래스는 특정한 방법에 정의된 클래스 국부 내부 클래스가 외부 클래스의 모든 구성원, 방법의 국부 변수, 방법의 형상에 접근할 수 있도록 하는 것이다. 반드시final 수식(java SE8)이 필요하지 않지만 국부 변수가 2차 부여되지 않도록 해야 한다.국부 내부 클래스와 일반 내부 클래스는 비슷하다. 왜냐하면 그들은 모두 정적 구성원을 정의하거나 성명할 수 없기 때문이다. 만약에 국부 내부 클래스가 정적 방법에서 정의된다면 이 국부 내부 클래스는 접근 방법의 정적 구성원만 방문할 수 있다.인터페이스 자체가 정적 (inherently static) 이기 때문에 국부 내부 클래스에서 인터페이스를 설명할 수 없습니다.국부 내부 클래스는 정적 구성원을 포함할 수 없습니다. 이 정적 구성원이 상수가 아니라면 (final에 의해 수식됨)
public void InnerClassFun(int k){
int min = 70;
class InnerClass3{
// final
final static int c = 12;
void print(){
// static static
System.out.println(a);
System.out.println(b);
//
System.out.println(min);
System.out.println(k);
System.out.println(c);
}
}
}
익명 내부 클래스는 이름이 없는 내부 클래스로 추상 클래스나 인터페이스 등 실례화할 수 없는 클래스의 확장에 사용된다. 가장 흔히 볼 수 있는 예는 클릭 이벤트와 루트의 오픈이다.
((Button) findViewById(R.id.start)).setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
}
}.start();
}
});
익명 내부 클래스는 접근 수식자를 추가할 수 없습니다.주의해야 할 것은 new 익명 클래스입니다. 이 클래스는 먼저 정의해야 합니다.
public class OutterClass {
public static void main(String[] args) {
Inner in = new OutterClass().getInner("Beijing");
System.out.println(in.getName());
}
public Inner getInner(final String name){
return new Inner(){
private String nameStr = name;
public String getName(){
return nameStr;
}
};
}
interface Inner{
String getName();
}
}
소재 방법의 형삼이 내부류에 사용되어야 할 때 이 형삼은final1이어야 한다.익명 내부류는 구조 방법이 있을 수 없다. 2.익명 내부 클래스는 정적 구성원, 방법, 클래스를 정의할 수 없습니다. 3.익명 내부 클래스는public,protected,private,static일 수 없습니다.4. 익명 내부 클래스의 실례만 만들 수 있습니다.5. 하나의 익명 내부 클래스는 반드시 new의 뒤에 있고 그 은밀함으로 하나의 인터페이스를 실현하거나 하나의 클래스를 실현한다. 6.익명 내부 클래스가 국부 내부 클래스이기 때문에 국부 내부 클래스의 모든 제한이 적용됩니다.
참조 대상:http://www.jianshu.com/p/1faacbd5794f http://android.blog.51cto.com/268543/384844/내부 클래스의 마운트 시기는 자바에서 내부 클래스가 외부 클래스의 구성원에게 접근할 수 있는 이유를 깊이 이해한다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.