자바기초(내부클래스, 외부클래스)

bitna's study note·2022년 4월 27일
0

자바

목록 보기
58/119

4월27일 내용정리

1.클래스안에 클래스를 넣는거 '중첩클래스' 또는 클래스안에 인터페이스를 넣는거를 '중첩인터페이스'
겉에 있는 싸는 역할 클래스를 '외부클래스' 안에있는걸 '중첩 클래스(멤버클래스)' 이다.

2.중첩클래스를 쓰는이유
(1)코드의 복잡성을 줄이기 위함.
(2)클래스의 멤버들을 서로 쉽게 접근이 가능하다.
(3)외부에는 불필요한 관계 클래스를 감춤

3.메서드 안에 선언한 클래스를 '지역클래스'라고 한다. 외부메서드가 실행 될때만 지역클래스가 실행되고 메서드가 종료시 같이 메모리에서 사라진다.
지역클래스안에서 참조하고 있는 지역 변수는 final이라고 안붙여줘도 자동으로 붙여준다.
지역클래스 는 접근제한자와 static을 붙일수 없다.

4.중첩클래스는 인스턴스멤버클래스(인스턴스 생성o)와 static멤버클래스(인스턴스 생성x)로 나눠져 있다.
class A{
class B{}
}
외부 A클래스의 객체를 만들어야 내부 B클래스를 사용가능하며 객체를 생성해야함.
A a=new A(); --------->객체생성1
A.B b=a.new B(); --------->객체생성2

class A{
class staticB{}
}
외부 A클래스의 객체를 생성 안해도 내부B클래스를 사용할수 있다. 왜냐면 객체 생성전에 다른 메모리에 생성 되기 때문에
A.B b=new A.B();
this를 내부 클래스에 사용 될때, '외부클래스.this.필드 or 메서드()'

class A{
String s="외부";
class staticB{
String s="내부";}
}

자바는 같은 변수명이면 제일 가까운 관계기준으로 생각함 그래서 s를 호출하면 내부필드 String s="내부" 로 인지,
외부 필드 String s="외부" 를 호출할려면 '외부클래스.this.필드 or 메서드()' 로 호출

package study_0427;

public class MemberClass {
	
	
	private String secret="비공개";  //외부클래스 private 필드
	String s="외부"; //외부클래스 필드
	
	class InnerClass{
		String s="내부"; //내부클래스 필드
		
		public void show1() { // 내부클래스 메서드 
			System.out.println("내부클래스"); // 내부클래스 메서드실행문
			System.out.println(secret); //외부클래스 private 필드 호출
			System.out.println(s); //내부클래스 필드호출
			System.out.println(MemberClass.this.s); //외부클래스 필드호출
		}
	}
	
	public static void main(String[] args) {
		MemberClass m =new MemberClass(); //외부클래스 객체 생성
		MemberClass.InnerClass m1=m.new InnerClass(); //내부클래스 객체 생성
		
		System.out.println(m1.s); //내부클래스의 내부클래스 필드호출
		m1.show1(); //내부클래스의 내부메서드 호출
	}
}
profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글

관련 채용 정보