이전글:

2020/12/05 - [용어정리] - 인터페이스 (C++, C# ,JAVA)-2

 

인터페이스 (C++, C# ,JAVA)-2

 

kwaksh2319.tistory.com

자바 인터페이스:

자바는 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

 

What is the difference between an interface and abstract class?

What exactly is the difference between an interface and abstract class?

stackoverflow.com

 

'프로그래밍언어 > 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

+ Recent posts