자바 인터페이스의 개념

9824 단어 Java
인터페이스의 개념
    자바 에서 인 터 페 이 스 는 모두 추상 적 인 방법 으로 구 성 된 집합 으로 인 터 페 이 스 는 interface 로 정의 해 야 하 며 그 안에 추상 적 인 방법 과 상수 만 있 을 수 있다.
인 터 페 이 스 는 사물 확장 기능 을 나타 내 는데 자바 에서 하나의 실 체 를 정 의 했 는데 실체의 속성, 실체의 행 위 를 포함한다.한편, 인 터 페 이 스 는 하나의 실체 가 발생 할 수 있 는 동작 을 정의 하고 하나의 성명 만 있 을 뿐 구체 적 인 행 위 는 없다.
    하나의 방법 이 여러 가지 유형 에서 서로 다른 표현 이 있 을 때 이때 이 방법 을 추상 화하 여 인 터 페 이 스 를 만 들 수 있다.
    인터페이스 안 에는 수정 할 수 없 는 전체 상수 만 있 을 수 있 고 추상 적 인 방법 만 있 을 수 있 으 며 인 터 페 이 스 는 구조 방법 이 없다.
인터페이스 정의:
interface Inter {
	public static final int i=10;	//      public static final
	public abstract void eat();	//     
}

인터페이스의 특징
4. 567917. 인 터 페 이 스 를 정의 할 때 interface 정 의 를 사용 하고 추상 류 와 구별 되 며 class 를 추가 할 필요 가 없습니다
4. 567917. 인 터 페 이 스 는 실례 화 되 어 서 는 안 되 고 대상 을 직접 만 들 수 없다. 인터페이스 안에 추상 적 인 방법 만 있 고 구체 적 인 기능 이 없 기 때문이다
4. 567917. 인 터 페 이 스 는 인 터 페 이 스 를 계승 할 수 있 고 인 터 페 이 스 는 구체 적 인 기능 을 실현 하려 면 반드시 그의 서브 클래스 를 실현 해 야 한다. 인 터 페 이 스 를 실현 하 는 서브 클래스 에서 인터페이스의 모든 추상 적 인 방법 을 다시 써 야 한다
4. 567917. 인터페이스 와 인터페이스 사이 에 많이 계승 할 수 있다
4. 567917. 인터페이스의 자 류 는 추상 류 일 수 있 지만 실제 적 인 의미 가 없다
4. 567917. 한 개의 하위 클래스 는 여러 개의 인 터 페 이 스 를 실현 할 수 있 고 implements 키 워드 를 통 해 이 루어 집 니 다
4. 567917. 인 터 페 이 스 는 다 중 을 통 해 대상 을 만 들 수 있 습 니 다
다음 과 같다.
interface A {
	public static final int i = 10;		//             public static final          ,   。
                                                
	public abstract void eat();
}

interface B extends A { 		//         
	public abstract void sleep();
}

interface C {
	public abstract void look();
}

abstract class D {        //       
	public void run() {
		System.out.println("   ");
	}

	public abstract void learn();
}

public class Text extends D implements B, C {		//                     
	//                     
	
	public void eat() {		//    A      
		System.out.println("   ");
	}

	public void look() {		//    C      
		System.out.println("   ");
	}

	public void sleep() {		//    B      
		System.out.println("   ");
	}

	@Override
	public void learn() {	//     D      
		System.out.println(" Java");
	}

	public static void main(String[] args) {
		B b=new Text();		//  ,            
		b.eat();
		b.sleep();
		System.out.println(B.i);    //            ,         
                C c=new Text();
		c.look();
		D d=new Text();	
		d.learn();
		
	}
}
/**
 *    :
   
   
10
   
 Java

 */

인 터 페 이 스 를 형식 매개 변수 로 하 다.
만약 한 방법의 형식 매개 변수 가 인터페이스 라면 다음 과 같다.
interface Inter{
	public abstract void learn();
}
class B{
	public void student(Inter a) {        //       
		a.learn();
	}
}
public class Text{		
	public static void main(String[] args) {
	
	}
}

이때 우 리 는 B 류 중의 student 방법 을 호출 하려 면 어떻게 합 니까?저희 가 두 가지 방법 이 있어 요.
4. 567917. 인터페이스 가 대상 을 만 들 수 없 기 때문에 우 리 는 그의 서브 실현 클래스 가 서브 실현 클래스 를 만 드 는 대상 을 호출 하 는 방법 을 제시 해 야 한다
4. 567917. 내부 류 의 방식 을 통 해 서브 실현 류 를 제공 할 필요 가 없다
하위 구현 클래스 를 만 드 는 방법:
interface Inter{
	public abstract void learn();
}
class B{
	public void student(Inter a) {
		a.learn();
	}
}
class InterImpl implements Inter{	//  Inter     

	public void learn() {
		System.out.println("  ");
	}
	
}
public class Text{		
	public static void main(String[] args) {
		Inter i=new InterImpl(); //           
		B b=new B();	//  B    
		b.student(i);	//     Student      learn  
	}
}
/**
 *    :
  
 */

내부 류
        만약 에 한 종류 가 다른 종류의 안 이나 방법 에 정의 된다 면 이 종 류 는 내부 류 라 고 하 는데 내부 류 는 구성원 내부 류, 국부 내부 류, 익명 내부 류 와 정태 내부 류 네 가 지 를 포함한다.
구성원 내부 클래스
        구성원 내부 클래스 는 외부 클래스 의 구성원 위치 에 있 습 니 다. 구성원 내부 클래스 는 외부 클래스 의 모든 내용 을 무조건 방문 할 수 있 습 니 다. static 정적 과 private 개인 적 인 것 을 포함 합 니 다.
public class Outside {
	int a = 10;		
	private int b = 20;

	class inside { // inside       
		public void show() { //       
			System.out.println(a);
			System.out.println(b);
		}
	}
}

주의:
내부 클래스 가 외부 클래스 와 같은 구성원 변수 와 방법 을 정의 할 때 가 까 운 원칙 으로 내부 클래스 의 변수 와 방법 을 우선 방문 합 니 다. 외부 클래스 의 구성원 과 방법 을 사용 하려 면 this 키 워드 를 사용 해 야 합 니 다.
   .this.    
   .this.    

외부 클래스 는 내부 클래스 의 변수 와 방법 에 직접 접근 할 수 없습니다. 내부 클래스 를 만 드 는 대상 을 통 해 접근 해 야 합 니 다.
public class Outside {
	int a = 10;		
	private int b = 20;

	class Inside { // inside       
		public void show() { //       
			System.out.println(a);
			System.out.println(b);
		}
	}
	public void show2() {
		Inside i=new Inside();
		i.show();
	}
}

구성원 내부 클래스 는 외부 클래스 에 의존 하여 존재 합 니 다. 즉, 내부 클래스 의 대상 을 만 들 려 면 외부 클래스 의 대상 이 있어 야 하고 다른 클래스 에서 구성원 내부 클래스 를 방문 하 는 방법 이나 변 수 는 통과 해 야 합 니 다.
외부 클래스 이름, 내부 클래스 대상 이름 = 외부 클래스 대상, 내부 클래스 대상
구성원 내부 클래스 의 대상 만 들 기:
class Outside {
	int a = 10;
	private int b = 20;

	class Inside { // inside       
		public void show() { //       
			System.out.println(a);
			System.out.println(b);
		}
	}

}

public class Text2 {
	public static void main(String[] args) {
		Outside.Inside i=new Outside().new Inside();    //           
		i.show();
	}
}
/**
   :
10
20
 */

구성원 내부 클래스 의 접근 권한 이 private 라면 이 내부 클래스 는 외부 클래스 에서 만 접근 할 수 있 고 다른 클래스 에 서 는 위의 방법 으로 개인 내부 클래스 의 대상 을 만 들 수 없습니다.
class Outside {
	int a = 10;

	private class Inside { //         ,          。
		public void show() { //       
			System.out.println(a);
		}
	}

}

public class Text2 {
	public static void main(String[] args) {
//		Outside.Inside i=new Outside().new Inside();
//		i.show();
//		  ,          
	}
}

부분 내부 류
국부 내부 클래스 는 한 방법 에 정 의 된 클래스 로 국부 내부 클래스 의 방문 은 방법 내 또는 이 작용 역 내 에 만 한정된다.
부분 내부 클래스 가 부분 변 수 를 방문 할 때 부분 변수 에 final 을 추가 해 야 합 니 다.
부분 변 수 는 방법 에서 정 의 된 변수 이기 때문에 현재 방법 이 실 행 된 후에 부분 변 수 는 자바 에 의 해 회수 된다. 이때 부분 내부 류 의 대상 이 부분 변 수 를 인용 하면 대상 이 존재 하지 않 는 변 수 를 가리 키 기 때문에 부분 내부 류 는 final 에 의 해 수 정 된 부분 변 수 를 방문 할 수 밖 에 없다.
class Outside {
	public void show() {
		final int a=1;	
		class Inside{
			public void show2() {
				System.out.println(a);	//                      final
				// jdk7           ,     
			}
		}
	}
}

부분 내부 류 는 Public, private, static 같은 수식 어 를 가 져 서 는 안 된다.
정적 내부 클래스
형식 상 으로 는 구성원 내부 류 앞 에 static 을 추가 한 것 으로 외부 클래스 에서 static 로 장 식 된 구성원 만 방문 할 수 있 는 것 이 특징 이다.
class Outside {
	static int a = 10;

	static class Inside { //      
		public void show() {
			System.out.println(a); //            
		}

	}

}

public class Text2 {
	public static void main(String[] args) {
		Outside.Inside i = new Outside.Inside(); //             
		i.show();

	}
}
/**
 *    : 10
 */

익명 내부 클래스
익명 내부 류 는 실제 개발 에서 가장 많이 사용 되 고 익명 내부 류 의 전제 조건 은 하나의 유형 이나 인터페이스 가 존재 하 는데 이런 유형 은 추상 류 가 될 수 있다.
익명 내부 클래스 의 형식 은:
new       {
         ;
}

익명 내부 류 는 본질 적 으로 이 종 류 를 계승 하거나 인터페이스 에서 의 방법 을 실현 했다.
예 를 들 어 우리 가 위 에서 언급 한 형식 매개 변 수 는 인터페이스의 문제 이 므 로 익명 내부 류 의 방식 으로 인터페이스 에서 추상 적 인 방법 을 다시 쓸 수 있 고 서브 실현 류 를 만 들 필요 가 없다.
interface Inter {
	public abstract void learn();
}

class B {
	public void student(Inter a) {
		a.learn();
	}
}

public class Text {
	public static void main(String[] args) {
		Inter a=new Inter() {	//     
			
			public void learn() {	//                               
				System.out.println("  ");
			}
		};
		a.learn();        //  learn  
	}
}
/**
 *    :   
 */

예제 분석:
4. 567913. 이 문제 에서 먼저 주 된 방법 을 보고 주 된 방법 중 에
    
		interface Inter { 
                        void show(); 
                }
		class Outer { 
                        //    
                }
		class OuterDemo {
			public static void main(String[] args) {
				  Outer.method().show();
			  }
		}
		        ”HelloWorld”

이 말 은 method 방법 이 정적 이라는 것 을 설명 할 수 있 고 정적 인 방법 만 이 클래스 이름 으로 직접 호출 될 수 있다.계속 보다
Outer.method()

이 말 은 설명 method 방법 을 만들어 Inter 의 익명 대상 을 되 돌려 주 고 대상 만 통과 할 수 있다.   .방법 명 호출 방법.
여기 에는 Inter 인터페이스의 서브 실현 류 가 없 기 때문에 우 리 는 Inter 인 터 페 이 스 를 실현 하 는 익명 내부 류 로 돌아 가 익명 내부 류 에서 인 터 페 이 스 를 실현 하 는 추상 적 인 방법 을 실현 해 야 한다.
그래서 보 정 된 코드 는:
 Outer.method().show();

형식 매개 변 수 는 추상 류 중의 문제 이다.
interface Inter {
	void show();
}

class Outer { 
	//      
	public static Inter method() {
		return new Inter() {  //              
			
			public void show() {    /        show  
				System.out.println("Hello word");
			}
		};
	}
}
class OuterDemo {
	public static void main(String[] args) {
		  Outer.method().show();
	  }
}
/**
Hello word
 * */



만약 에 우리 가 B 류 중의 cat 방법 을 호출 해 야 한다 면 A 류 는 추상 적 인 유형 이기 때문에 A 류 의 대상 을 직접 만 들 수 없다. 우 리 는 먼저 A 류 에 키 클래스 를 만 든 다음 에 다 중 방식 으로 A 류 의 대상 을 cat 방법 으로 전달 하 는 형식 매개 변수 부분 을 만들어 야 한다.
abstract class A{
	public void sleep() {
		System.out.println("  ");
	}
}
class B{
	public void cat(A a) {
		a.sleep();
	}
}
public class Text {
	public static void main(String[] args) {
		
	}
}

익명 내부 클래스 를 사용 할 수도 있 는데, A 클래스 의 하위 클래스 를 추가 로 제시 하지 않 아 도 된다 는 장점 이 있다.
abstract class A{
	public void sleep() {
		System.out.println("  ");
	}
}
class B{
	public void cat(A a) {
		a.sleep();
	}
}
class C extends A{
	
}
public class Text {
	public static void main(String[] args) {
		A a=new C();
		a.sleep();
	}
}
/**
 *    :   
 */

인터페이스 와 추상 류 를 언제 사용 합 니까?
추상 류 는 사물 자체 에 대한 추상 이다. 예 를 들 어 교사 류, 학생 류 는 인류 로 추상 화 할 수 있다.
인 터 페 이 스 는 행위 에 대한 추상 이다. 예 를 들 어 교사 가 영 어 를 배 우려 면 학생 도 영 어 를 배 워 야 하고 영 어 를 배우 면 인터페이스 로 추상 화 할 수 있다.
추상 류 는 이 대상 이 무엇 인지, 인 터 페 이 스 는 이 대상 이 무엇 을 할 수 있 는 지 를 나타 낸다.
그래서 추상 류 는 한 가지 종류 만 있 을 수 있다. 예 를 들 어 교사 와 학생 은 인류 일 뿐 비인간 일 수 없다.
교사 나 학생 은 여러 개의 인 터 페 이 스 를 실현 할 수 있다.그들 은 영어 도 배 울 수 있 고 수학 도 배 울 수 있다.

좋은 웹페이지 즐겨찾기