이전글:
2020/12/05 - [용어정리] - 인터페이스 (C++, C# ,JAVA)-2
자바 인터페이스:
자바는 C# 과 거의 유사하다 자바도 마찬가지로 일반 클래스나 추상 클래스는 다중상속이 불가하며, 인터페이스라는것을 따로 사용하여 다중상속이 가능하다.
예시를 보자
package Test01;
public class Main {
public static void main(String [] args) {
MyInterface interfaceTest=new MyInterface();
MyAbstractInheritance abstractTest=new MyAbstractInheritance();
interfaceTest.InterfaceMethod();
interfaceTest.InterfaceMethod2();
abstractTest.AbstractMethod();
}
}
위는 인터페이스 클래스 MyInterface를 테스트 하기위한 클래스이고
MyAbstractInheritance 추상클래스를 테스트 하기위한 클래스이다.
그렇다면 MyInterface 부터 확인해보자
package Test01;
interface interfaceTest{
//private , protected 안됨
void InterfaceMethod();//public
}
interface interfaceTest2{
//private , protected 안됨
void InterfaceMethod2();//public
}
public class MyInterface implements interfaceTest,interfaceTest2{
public void InterfaceMethod() {
System.out.println("Interface Method");
}
public void InterfaceMethod2() {
System.out.println("Interface Method2");
}
}
코드를 보면
interface interfaceTest{
//private , protected 안됨
void InterfaceMethod();//public
}
interface interfaceTest2{
//private , protected 안됨
void InterfaceMethod2();//public
}
두개의 인터페이스의 가상함수를 만듭니다. 현재 이 메서드(함수)는 기능이 구현되지 않는 상태입니다
public class MyInterface implements interfaceTest,interfaceTest2{
public void InterfaceMethod() {
System.out.println("Interface Method");
}
public void InterfaceMethod2() {
System.out.println("Interface Method2");
}
}
MyInterface 클래스에 두개의 인터페이스를 상속받아서 다중상속이 가능합니다. 그리고 두개의 함수를 오버라이딩을 할수 있습니다.
그렇다면 다시 추상 클래스를 확인해보겠습니다.
package Test01;
abstract class MyAbastract {
public void TestMethod() {
System.out.println("abstract Class ");
}
abstract void AbstractMethod();
}
package Test01;
abstract class MyAstract2 {
public void TestMethod2() {
System.out.println("abstract Class 2");
}
abstract void AbstractMethod2();
}
두개의 추상클래스를 가지고 클래스를 두개의 추상클래스를 다중상속 받겠습니다.
package Test01;
public class MyAbstractInheritance extends MyAbastract {
public void AbstractMethod() {
System.out.println("AbstractMethod");
}
}
여기서 오류가 발생합니다. 두개 클래스 상속이 c#과 마찬가지로 자바에서도 막혀있습니다.
package Test01;
public class MyAbstractInheritance extends MyAbastract {
public void AbstractMethod() {
System.out.println("AbstractMethod");
}
}
이런식으로 상속받으면 올바르게 output이 나옵니다.
stackoverflow.com/questions/1913098/what-is-the-difference-between-an-interface-and-abstract-class
'프로그래밍언어 > JAVA' 카테고리의 다른 글
<JAVA>Class 클래스 동적로딩 (0) | 2020.12.07 |
---|---|
<JAVA >Clone Method (0) | 2020.12.07 |
<Web05> WebTest01 (0) | 2020.11.25 |
<Web04> Posts (0) | 2020.11.24 |
< Web 03> Jsp Connect DataBase (0) | 2020.11.23 |