java 자바 인터페이스 C. Java2017. 7. 2. 21:36
interface와 abstract클래스는 공통점
----------------------------------------------------------------------------------------
1. 자식클래스에게 상속됨으로서 사용이 가능합니다.
2. 자식클래스에게 자신의 추상 메소드를 구현하도록 강제를 합니다.
interface와 abstract클래스는 차이점
----------------------------------------------------------------------------------------
1. abstract클래스는 구현된 메서드와 구현되지 않은 메서드를 둘다 가질 수 있습니다.
단, 구현되지 않은 메서드가 하나 이상 존재해야만 abstract클래스라는거죠..
2. interface는 메소드에 대해서 정의만 할 수 있지 구현된 메서드는 포함 할 수가 없습니다.
자식클래스들이 공통된 메서드를 포함하도록 하는 기능만 하죠
3. 자바에서 abstract클래스나 일반 클래스나 전부 extends 키워드로는 하나 만 상속 받을 수 있습
니다. 한번에 여러개의 부모를 상속받을 수가 없죠.
그래서 나온것이 interface입니다. interface는 여러개를 상속 받을 수 있습니다.
추상클래스 -> 클래스이다.
일반 메서드와 추상 메서드를 모두 가질수 있다.
확장을 하며 extends로 서브 클래스 정의
단일 상속만 가능하다.
변수와 상수 모두 가질수 있다.
모든 추상메서드는 서브 클래스에서 반드시 구현되어야 하며 업캐스팅이 가능하다.
인터페이스 -> 클래스가 아니다. (interface로 선언)
public abstract 추상메서드만 가질 수 있다. 일반메서드는 가질수 없다.모든 메서드는 내부적으로 모두 public
서브클래스에서 implements로 구현
다중상속이 가능하다.
public static final형태의 상수만 가질수 있다.
인터페이스에서 모든 메서드는 묵시적으로 abstract이다
모든 추상메서드는 서브 클래스에서 반드시 구현되어야 하며 업캐스팅이 가능하다.
ex) interface IHello { void sayHello(string name); }
// 인터페이스 선언 (메서드 앞에 public abstract 이 묵시적으로 선언되어 있다.)
class Hello implements IHello{
public void sayHello(String name) { System.out.println(name + "헬로"); }
//public를 생략하면 에러!! 인터페이스에서 메소드는 자동적으로 public으로 지정되기
때문에
}
class IhMain {
public staic void main(String[] args){
Hello obj = new Hello();
obj.sayHello
}
}
ex) 인터페이스 다중 상속 예제
interface IHello { public abstract void sayHello(String name); }
interface IBye { public abstract void sayBye(String name); }
//두 인터페이스로부터 상속을 받는 클래스 설계
class subC implement IHello, IBye {
public void sayHello(String name){ System.out.println(name + "헬로"); }
public void sayBye(String name) { System.out.println(name + "잘가"); }
}
class subMain{
punlic static void main(String[] args){
subC test = new subC();
test.sayHello(args[0]);
test.sayBye(args[0]);
}
}
ps. 인터페이스도 상속이 가능하다.
=> interface A {public abstact a메소드;}
interface B {public abstact b메소드;}
interface C extends A,B {public abstact c메소드 }
class subC implement C {
public a메소드 오버라이딩;
public b메소드 오버라이딩;
public c메소드 오버라이딩;
}
class subMain{
public staic void main(String[] args){
subC obj = new subC();
obj.a메소드;
obj.b메소드;
obj.c메소드;
}
}
'C. Java' 카테고리의 다른 글
| 정적 중첩 클래스 (0) | 2017.07.02 |
|---|---|
| 중첩 클래스 (0) | 2017.07.02 |
| 아스키 코드표 (0) | 2017.07.02 |
| JVM (java virtual machine) 구조 (0) | 2017.07.02 |
| java 자바 객체생성 (0) | 2017.07.02 |
