-
210422_5(인터페이스interface,implements,다중구현)JAVA(Sol)(정리대기중..언젠가) 2021. 4. 22. 15:27
인터페이스 : 모든메서드가 추상 메서드로 구성됨 , 변수는 존재가능(대부분 상수형태)
|
적용 implements 다중적용이 가능하다. extends와는 다르다.(cf.상속 => extends)
↓
구현클래스 : 적용한 모든 메서드를 재정의 한다.
추상임에도 불구하고 abstract 키워드가 없다.
------------------------------인스턴스 생성
1) 인터페이스 인객 = new 인생(); --------(X) 영역정보가전혀없다 /메모리할당할수가없다.
2) 구현클래스 구객 = new 구생(); ---------(O) 다중구현시 사용
3) 인터페이스 인객 = new 구생(); ---------(O) 주로이렇게사용 --다형성
------------------------------용도? 은닉화(캡슐화)
인터페이스 : 조작기
자동차를 ---->운전
핸들
기능은 악셀
많다 브레이크
깜빡이
기어
-------------------------------
package chapter14; interface A{ void display(String s); } class C1 implements A{ public void display(String s) { System.out.println("☆클래스 C1 객체 이용 : " +s); } } class C2 implements A{ public void display(String s) { System.out.println("★클래스 C2 객체 이용 : " +s); } } class C3 implements A{ public void display(String s) { System.out.println("♣클래스 C3 객체 이용 : " +s); } public int getInt() { return 1000; } } class IR1{ public static void main(String[] args) { A memo; //인터페이스객체 memo = new C1(); // 인터페이스객체에 구현클래스생성자 memo.display("경기도 - 북한산"); memo = new C2(); memo.display("강원도 - 설악산"); memo = new C3(); memo.display("강화도 - 마니산"); // memo가 C1,C2,C3처럼다양하게쓰는것을 다형성. } } //☆클래스 C1 객체 이용 : 경기도 - 북한산 //★클래스 C2 객체 이용 : 강원도 - 설악산 //♣클래스 C3 객체 이용 : 강화도 - 마니산
package chapter14; interface Student { public void setName(String name); public String getName(); public void setRank(int rank); public int getRank(); } class StudentCon implements Student { String name = null; int rank = 0; public void setName(String name) { this.name = name; } public String getName() { return name; } public void setRank(int rank) { this.rank = rank; } public int getRank() { return rank; } public String prnName() { String s = " "; s = "☆☆☆"; s = s + name; s = "☆☆☆"; return s; } } public class StudentTest { public static void main(String[] args) { Student s = new StudentCon(); // 인터페이스객체 = new 구현클래스(); s.setName("왕눈이"); System.out.println("이름:" + s.getName()); s.setRank(1); System.out.println("등수:" + s.getRank()); } }
package chapter14; interface B { void display(String s); } class D1 implements B { String str = ""; public void display(String s) { str = s; System.out.println("클래스 D1 객체 이용:" + s); } } class D2 implements B { String str = ""; public void display(String s) { str = s; System.out.println("클래스 D2 객체 이용:" + s); } } class IR2 { public static void main(String[] args) { B memo; memo = new D1(); memo.display("석모도"); D1 d1 = (D1) memo; // 객체형변환(하위클래스의멤버를호출하기위해str) System.out.println(d1.str); memo = new D2(); // D1,D2 다형성 memo.display("강화도"); D2 d2 = (D2) memo;// 객체형변환(하위클래스의멤버를호출하기위해str) System.out.println(d2.str); } }
인터페이스 다중구현
인터페이스를 여러개 받는 경우는 다형성으로 생성하지 않고 그냥 하위 인스턴스를 직접 생성하여 사용한다.
이유는 인터페이스도 여러개이면 복잡해지기 때문에
package chapter15; interface Green { public String greenColor(); } class Greenmp implements Green { public String greenColor() { return "초록색입니다.★"; } } interface Red { public String redColor(); } class Redmp implements Red { public String redColor() { return "빨간색입니다.★"; } } class Color implements Green, Red { //다중구현(인퍼페이스는가능하다) public String greenColor() { return "초록색입니다."; } public String redColor() { return "빨간색입니다."; } } public class ColorMain { public static void main(String[] args) { Green g = new Greenmp(); System.out.println(g.greenColor()); Red r = new Redmp(); System.out.println(r.redColor()); Color c = new Color(); //다중구현을했을경우2번공식 구현객체=new구현생성자 System.out.println(c.greenColor()); System.out.println(c.redColor()); } } //초록색입니다.★ //빨간색입니다.★ //초록색입니다. //빨간색입니다.
상위인스턴스를 생성하면 더 적은수의 기능이 보이므로 사용하기편리하다.->인터페이스로적합하다.
하위 클래스의 메서드를 알지못해도 값을 입력하면 처리결과가 나오기때문에 선택의 고민이 적어진다?조부모 : 2 -----------------2개
부모 : 3 -------------------5개
(확장 기능중에 외부에 노출되면 안되는 것이있는경우)
자식 : 4 -------------------9개가보임
'JAVA(Sol)(정리대기중..언젠가)' 카테고리의 다른 글
210422_7(예외처리try_catch_fianlly) (0) 2021.04.22 210422_6(상수) (0) 2021.04.22 210422_4(추상클래스abstact) (0) 2021.04.22 210422_1~3(상속과생성자) (0) 2021.04.22 210421_5~8(오버라이딩Overriding,객체형변환, Object클래스) (0) 2021.04.21