본문 바로가기
Java기초

[Java] Interface and Inner Class

by jackypark 2022. 7. 5.

인터페이스
 - 추상클래스를 더 추상화시킨 구조.
 - 구조  : 상수 + 추상메소드 + java8이후로 디폴트메소드와 static 메소드 도 추가가능

  - 다중상속을 대체 . ( 인터페이스를 여러개 받을 수 있다. )
  - implements 인터페이스명1, 인터페이스명2, .......
  - 인터페이스도 동적바인딩이 가능

interface A{ //인터페이스는 상수와 추상메소드만 사용가능
	final static int a=0; // 인터페이스에서는 final static 생략이 되어있음 memory를 아끼기 위해
	
	public abstract void disp(); //앞에 abstract가 생략 
}

interface B{ //인터페이스는 상수와 추상메소드만 사용가능
	final static int a=0; // 인터페이스에서는 final static 생략이 되어있음 memory를 아끼기 위해
	
	public abstract void disp1(); //앞에 abstract가 생략 
}

interface C extends A,B{ //interface는 interface 끼리 extends 가능 
	final static int a=0; // 인터페이스에서는 final static 생략이 되어있음 memory를 아끼기 위해
	
	public abstract void disp2(); //앞에 abstract가 생략 
	
}

public class Day10 extends Object implements C{
	@Override
	public void disp() {
		System.out.println("Inter");
	}
	public void disp1() {
		System.out.println("Inter2");
	}
	public void disp2() {
		System.out.println("Inter3");
	}
	
	public static void main(String[] args) {
		 A a=new Day10();
		 a.disp();
		 C b=(C)a;//new Day10();
		 b.disp();
		 b.disp1();
		 b.disp2();
		 
	}
}

 *  inner class
 *  - 클래스내에 또 다른 클래스를 구현
 *  - Outer class
 *  - Inner class 
 *  - 종류
 *  1. member inner class 
 *  2. static inner class
 *  3. local inner class
 *  4. anonymous inner class
 * 
 * -  outer의 멤버를 자유롭게 사용이 가능 멤버를 자유롭게 사용이 가능
 * -  outer 객체 생성후 inner 객체를 생성.
 *  단, static은 outer를 생성하지 않고 사용.

public class InnerExam {
	
	private int a;
	private int b;
	private static int c;

	public InnerExam() {
		a=1;
		b=2;
		c=3;
	}
	 public void output() { 
	
		class LocalInner{ // local inner Class
	
			public void disp() {
				System.out.println(a);
				System.out.println(b);
				System.out.println(c);
			}
		}
		LocalInner li=new LocalInner();
		li.disp();
	}
	class AInner{  //member inner Class
	
		public void disp() {
			System.out.println(a);
			System.out.println(b);
			System.out.println(c);
		}
	}
	public static void main(String[] args) {
		//InnerExam e=new InnerExam();
		//InnerExam.AInner a=e.new AInner();
		//InnerExam.AInner a=new InnerExam().new AInner(); //한줄로 만들기		
		//a.disp();	
		
		InnerExam e=new InnerExam();
		e.output();
	}
}

댓글