ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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개가보임

     

     

     

Designed by Tistory.