gwooden_코린이

java_내부클래스_221130(8일차) 본문

java/8일차

java_내부클래스_221130(8일차)

gwooden22 2022. 11. 30. 12:08
728x90

내부클래스 - 접근이 쉽게 가능한 것 

 

public class A{ // 하나의 클래스안에서 전부 처리할 수 있다는 것

 

      public class B{ //내부 클래스는 다른 타클래스에서 접근하기 어려움

                              //직접적으로는 접근 자체가 안됨

                              //외부 클래스를 타고 내부 클래스로 들어가야 가능

 

      }

}

 

인스턴스 클래스

정적 멤버 클래스

로컬 클래스

 

package 내부클래스;

public class Main {

	public static void main(String[] args) {
		
		A a = new A(); //A클래스에 대한 객체 생성
		
		/** static class B **/
		A.B b = new A.B(); //A클래스 안에 있는 B클래스에 대한 객체 생성
		b.var1 = 3;
		b.method1();
//		A.b.var2 = 3; 아래와 동일
		b.var2 = 3; //static 변수는 클래스 내부에 공용으로 사용되는 변수
		b.method2();
		
		/** public class C **/
		A.C c = a.new C(); //A클래스로 생성된 a객체를 이용해 A내부에 C클래스에 대한 c 객체 생성
		c.var1 = 3;
		c.method();
		
		/** void method() **/
		/**       class D**/
		a.method();
		
	}

}
A 객체 생성
B 객체 생성
static 내부 클래스의 메서드1
static 내부 클래스의 static 메서드2
C 객체 생성
C 클래스의 메서드
D 객체 생성
C 클래스의 메서드

package 내부클래스;

public class A {
	
	A() {
		System.out.println("A 객체 생성");
	}
	
	/** B클래스 시작 **/
	
	static class B {//내부에 새로운 클래스 생성 -> static으로 선언된 B 클래스
		//아래 있는 코드는 B라는 내부 클래스 안에 있는 것
		
		B() {
			System.out.println("B 객체 생성");
		}
		
		int var1; //변수 1
		static int var2; //변수2
		
		void method1() { //메서드 1
			System.out.println("static 내부 클래스의 메서드1");
		}
		
		static void method2() { //메서드 2
			System.out.println("static 내부 클래스의 static 메서드2");
		}
		
	}
	
											/** B클래스 끝 **/
	
	/** C클래스 시작 **/
	
	public class C {
		C() { //생성자 1
			System.out.println("C 객체 생성");
		}
		
		int var1; //변수 1
		
		void method() { //메서드 1
			System.out.println("C 클래스의 메서드");
		}
	}
	
							/** C클래스 끝 **/
	
	
	/** 외부 A 클래스에 method() 메서드 시작 **/
	
	void method() {
		
		/** D클래스 시작 **/
		class D {
			D() { //생성자 1
				System.out.println("D 객체 생성");
			}
			
			int var1; //변수 1
			
			void method() { //메서드 1
				System.out.println("C 클래스의 메서드");
			}
			
		} 							/** D클래스 끝 **/
		
		//A.method A에 대한 메서드가 호출 되면 객체가 생성
		D d = new D(); 
		d.var1 = 3;
		d.method();
	}
							/** 외부 A 클래스에 method() 메서드 끝 **/
	
									

}

 

728x90
Comments