자바 내장 클래스 의 상세 한 해석 및 인 스 턴 스 코드
지금까지 우 리 는 자바 파일 에서 클래스 를 직접 정의 했다.이러한 종 류 는 가방(package)의 등급 에 나타난다.자바 허용 클래스 의 끼 워 넣 기 정의.
한 클래스 에 다른 클래스 를 끼 워 넣 는 방법 을 설명 합 니 다.
내부 류
자바 는 클래스 내부 에서 클래스 를 정의 할 수 있 도록 합 니 다.이 클래스 가 static 수정자 가 없다 면 내부 에 포 함 된 클래스 를 내부 클래스(inner class)라 고 합 니 다.
내부 류 는 외부 대상 의 한 구성원 으로 여 겨 진다.내부 클래스 를 정의 할 때 저 희 는 접근 권한 제어(Public,private,proctected)가 있 습 니 다.
내부 클래스 를 사용 할 때,우 리 는 먼저 외부 대상 을 만들어 야 한다.내부 클래스 는 외부 대상 의 한 구성원 이기 때문에 우 리 는 대상 의 내부 에서 내부 클래스 를 자 유 롭 게 사용 할 수 있다.
인 스 턴 스 코드:
public class Test
{
public static void main(String[] args)
{
Human me = new Human("Vamei");
me.drinkWater(0.3);
}
}
class Human
{
/**
* inner class
*/
private class Cup
{
public void useCup(double w)
{
this.water = this.water - w;
}
public double getWater()
{
return this.water;
}
private double water = 1.0;
}
/**
* constructor
*/
public Human(String n)
{
this.myCup = new Cup();
this.name = n;
}
public void drinkWater(double w)
{
myCup.useCup(w);
System.out.println(myCup.getWater());
}
private Cup myCup;
private String name;
}
위의 예 에서 Cup 류 는 내부 류 이다.이 내부 클래스 는 private 접근 권한 이 있어 Human 내부 에서 만 사용 할 수 있 습 니 다.이렇게 되면 컵 류 는 Human 류 에 의 해 전용 되 는 클래스 가 된다.만약 우리 가 다른 접근 권한 을 사용한다 면 내부 클래스 도 외부 에서 접근 할 수 있 습 니 다.예 를 들 어:
public class Test
{
public static void main(String[] args)
{
Human me = new Human("Vamei");
me.drinkWater(0.3);
Human.Cup soloCup = me.new Cup(); // be careful here
}
}
class Human
{
/**
* inner class
*/
class Cup
{
public void useCup(double w)
{
this.water = this.water - w;
}
public double getWater()
{
return this.water;
}
private double water = 1.0;
}
/**
* constructor
*/
public Human(String n)
{
this.myCup = new Cup();
this.name = n;
}
public void drinkWater(double w)
{
myCup.useCup(w);
System.out.println(myCup.getWater());
}
private Cup myCup;
private String name;
}
내부 클래스 는 기본 접근 권한(패키지 접근 권한)입 니 다.Test 클래스 에서 Human 의 내부 클래스 Cup 을 방문 하고 이 내부 클래스 를 사용 하여 대상 을 만 들 수 있 습 니 다.우리 가 만 들 때 유형 을 설명 하고 new 를 사용 하 는 방법 에 주의 하 십시오:Human.Cup soloCup = me.new Cup();
내부 클래스 대상 을 만 들 때 외부 클래스 대상(me)을 기반 으로 이 외부 클래스 대상 을 통 해 Cup 대상(me.new)을 만들어 야 합 니 다.나 는 다음 절 에서 그 속 의 의 미 를 이야기 할 것 이다.
폐쇄 하 다
우리 가 내부 클래스 대상 을 직접 만 들 때 외부 클래스 대상 을 기반 으로 해 야 한 다 는 것 을 알 수 있다.내부 대상 은 반드시 외부 대상 에 의존 해 야 한 다 는 것 이다.
내부 대상 과 외부 대상
이와 함께 내부 클래스 대상 은 외부 클래스 대상 의 구성원(private 멤버 라 도)을 방문 할 수 있다.다른 측면 에서 볼 때 내부 클래스 대상 은 생 성 시의 환경 정보,즉 다른 언어 에서 의 패 킷(closure)특성 을 추가 합 니 다.파 이 썬 패키지 참조
우 리 는 아래 의 예 를 본다.
public class Test
{
public static void main(String[] args)
{
Human me = new Human("Vamei");
Human him = new Human("Jerry");
Human.Cup myFirstCup = me.new Cup();
Human.Cup mySecondCup = me.new Cup();
Human.Cup hisCup = him.new Cup();
System.out.println(myFirstCup.whosCup());
System.out.println(mySecondCup.whosCup());
System.out.println(hisCup.whosCup());
}
}
class Human
{
/**
* inner class
*/
class Cup
{
public String whosCup()
{
return name; // access outer field
}
}
/**
* constructor
*/
public Human(String n)
{
this.name = n;
}
public void changeName(String n)
{
this.name = n;
}
private String name;
}
실행 결과:
Vamei
Vamei
Jerry
위의 예 에서 저 희 는 내부 클래스 대상 을 통 해 외부 클래스 대상 의 name 구성원 을 방문 합 니 다.우리 가 서로 다른 외부 대상 을 바탕 으로 내부 대상 을 만 들 때 얻 은 환경 정보 도 이에 따라 달라 질 것 이다.모자이크 static 클래스
우 리 는 클래스 내부 에서 static 클래스 를 정의 할 수 있 습 니 다.이러한 종 류 를 내장 static 류(nested static class)라 고 합 니 다.
외부 클래스 에 의존 하지 않 고 static 클래스 의 대상 을 직접 만 들 수 있 습 니 다.이에 따라 static 류 를 끼 워 넣 어도 외부 대상 의 방법 을 호출 할 수 없고 외부 대상 의 데 이 터 를 읽 거나 수정 할 수 없습니다.효과 적 으로 볼 때 static 류 를 포함 하여 네 임 스페이스(name space)를 넓 혔 습 니 다.예 를 들 어 아래 Human.Mongolian:
public class Test
{
public static void main(String[] args)
{
Human.Mongolian him = new Human.Mongolian();
him.Shout();
}
}
class Human
{
/**
* nested class
*/
static class Mongolian
{
public void Shout()
{
System.out.println("Oh...Ho...");
}
}
}
새 겨 진 static 클래스 를 정의 할 때,우 리 는 서로 다른 접근 권한 수식 자 를 가 질 수 있 습 니 다.총결산
플러그 인 클래스 는 우리 가 더 좋 은 조직 클래스 를 허용 한다
내부 클래스 가 폐쇄 를 실현 하 였 다.
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.