Java

[Java] 내부 클래스

블로그 주인장 2023. 8. 9.

[Java] 내부 클래스

목차


📢 내부 클래스

  • 클래스 안에 클래스가 있는 형태
  • 중첩 클래스라고 하기도 한다.

🎪 내부 클래스 특징

  1. 내부 클래스에서 외부 클래스 멤버 접근 가능
  2. 외부에서는 내부 클래스를 접근할 수 없다.

📢 내부 클래스 종류

🎪 인스턴스 클래스(Instance)

  • 외부 클래스 영역에 선언된 클래스 중에서 static 키워드를 가지지 않는 클래스
  • 인스턴스 클래스는 주로 외부 클래스(outer class)의 인스턴스 변수나 인스턴스 메소드에 사용

  
class Outer{
public void Print(){
System.out.println("Outer.print");
}
}
public class Main {
public static void main(String[] args) {
// 외부 클래스
Outer o1 = new Outer();
}
}

🎪 정적 클래스(static)

  • 외부 클래스 영역에 선언된 클래스 중에서 static 키워드를 가지는 클래스
  • 정적 클래스는 주로 외부 클래스(outer class)의 클래스 메소드에 사용될 목적으로 선언

  
class Outer{
public void Print(){
System.out.println("Outer.print");
}
//static 클래스
static class InnerStatic{
public void innerPrint(){
}
}
}
public class Main {
public static void main(String[] args) {
// 내부 클래스 - 정적
Outer.InnerStatic is1 = new Outer.InnerStatic();
}
}

🎪 지역 클래스(local)

  • 외부 클래스의 메소드나 초기화 블록에 선언된 클래스를 의미
  • 지역 클래스는 선언된 블록 내에서만 사용

  
class Outer{
public void Print(){
System.out.println("Outer.print");
}
//이너 클래스
class Inner{
public void innerPrint(){
Outer.this.Print();
}
}
}
public class Main {
public static void main(String[] args) {
// 내부 클래스 - 인스턴스
Outer.Inner i1 = new Outer().new Inner();
}
}

🎪 익명 클래스(anonymous)

  • 다른 내부 클래스와는 달리 이름을 가지지 않는 클래스를 의미
  • 클래스의 선언과 동시에 객체를 생성하므로, 단 하나의 객체만을 생성하는 일회용 클래스이다.
  •  생성자를 선언할 수도 없으며, 오로지 단 하나의 클래스나 단 하나의 인터페이스를 상속받거나 구현한다.

  
abstract class Person{
public abstract void PrintInfo();
}
class Student extends Person{
public void PrintInfo(){
System.out.println("Student.PrintInfo");
}
}
public class Main {
public static void main(String[] args) {
// 익명 클래스
Person p1 = new Person() {
@Override
public void PrintInfo() {
System.out.println("Person.PrintInfo");
}
};
}
}
반응형

'Java' 카테고리의 다른 글

[Java] 람다식과 스트림  (0) 2023.08.10
[Java] 인터페이스  (0) 2023.08.09
[Java] 추상클래스  (0) 2023.08.09

댓글