인터페이스
추상클래스보다 추상화정도가 더높은 class로
추상method와 상수만을 멤버로 같는다
instance를 생성할수없고 class작성에 도움을 줄목적으로 사용
미리 정해준 규칙에 맞게 구현하도록 표준을 제시하는데 사용
//interface I
//class 대신 interface를 이용
public void aa(); //추상 method를 가진다
//추상method는 외부에서 접근해야하기때문에 public 접근제어자를 가진다
//class InterfaceEx implements I
//상속하기위해 extends 대신 implements를 사용
public void aa() {} //추상method aa 를 overriding 해줘야한다
---------
//public class InterfaceEx1
//main
//interface Inter1
abstract public void aa(); //abstract와 public은 생략이되있다
//interface Inter2
void bb();
//class Myclass implements Inter1, Inter2
public void aa() {}
public void bb() {}
//상속을 받을경우 반드시 구현해줘야되는데 공백으로 나둬도된다.
------------
//interface Inter1
void aa();
//interface Inter2 extends Inter1
void bb();
//interface끼리 상속받을때는 extends를 사용한다
//interface Inter3 extends Inter1, Inter2
void cc(); //interface는 다중상속이 가능하다
//class Super
public void ss() {
System.out.println("hihi");
}
//class B extends Super implements Inter3
public void aa() {} //class를 상속받으면서 interface도 구현이 가능하다
public void bb() {}
public void cc() {}
//Inter3는 Inter1,2을 상속받았기때문에 모든 method를 구현해줘야한다
//public class InterfaceEx2
//main
----------
//public class InterfaceAuser
//main
//interface규격에 맞춰 잡업을 양방향에서 작업할수있다
A a = new A();
a.setNumber(10, 20, 100);
System.out.println(a.sum());
System.out.println(a.avg());
//interface를 만들었기때문에
//세부적인 내용을 몰라도 어떻게사용될지 알수있다
//interface Ainterface
void setNumber(int n1, int n2, int n3); //abstract,public이 생략되있다
int sum(); //표준을 제공해줘서 양방향에서 동시에 개발이가능하게한다
int avg();
//class A implements Ainterface
//interface규격에 맞춰 잡업을 양방향에서 작업할수있다
int n1; //implements를 이용해 사용할수있다
int n2;
int n3;
public void setNumber(int n1, int n2, int n3) {
this.n1 = n1;
this.n2 = n2;
this.n3 = n3;
}
public int sum() {
return n1+n2+n3;
}
public int avg() {
return (n1+n2+n3)/3;
}
-----------
//interface Interface4
void a(); //abstract method
//interface Interface5
String b();
//abstract class AbsClass
abstract void c();
//abstract class는 일반method와 추상method를
//사용할수있기때문에 method정의할때 abstract적어줘야한다
//interface InterfaceF extends Interface4, Interface5
void d();
//public class InterfaceEx3 extends AbsClass implements InterfacceF
//모든 abstract class와 interface를 사용한다
//모든 method를 overriding을 해줘야한다
public void c() {
System.out.println("CCCC");
}
public void a() {
System.out.println("AAA");
} //overriding 은 접근제어자가 같아야하는데 interface method는 public 이 생략되있다
public String b() { //String type을 return해줘야한다
return "BBBB";
}
public void d() {
System.out.println("DDDD");
}
//main
InterfaceEx3 in3 = new InterfaceEx3();
in3.c();
in3.a(); //AAA가 출력된다
System.out.println(in3.b()); //return값이 있어서 출력을해줘야한다
in3.d();
AbsClass ac = new InterfaceEx3();
//부모클래스의 타입으로 자식클래스 개체생성이 가능하다
ac.c(); //본인클래스에있으므로가능
ac.b(); //Absclass에 명시되있지않으므로 error가생긴다
ac.a(); //error
ac.d(); //error
InterfaceF inF = new InterfaceEx3();
//부모클래스의 타입으로 자식클래스 개체생성이 가능하다
inF.a(); //InterfaceF는 Interface 4와 5 를 상속받았기때문에가능
inF.b(); //가능
inF.c(); //c는 AbsClass 에서 만든것이므로 error가 생긴다
inF.d(); //가능
'java' 카테고리의 다른 글
다형성(Polymorphism) -second (0) | 2019.08.03 |
---|---|
다형성(Polymorphism) -first (0) | 2019.08.03 |
final class, final method (0) | 2019.08.02 |
추상클래스(abstract class), 추상메소드(abstract method) (0) | 2019.08.02 |
접근 제어자(Access modifier) (0) | 2019.08.02 |