Part17 - interface

uglyduck.dev·2020년 9월 27일
0

예제로 알아보기 👀

목록 보기
17/22
post-thumbnail

Ex01_interface

package com.mywork.ex;
/*
인터페이스 (interface)
	1. 추상클래스가 인터페이스로 발전한다.
	2. 특정 규칙을 지킨 추상클래스가 인터페이스이다.
	3. 인터페이스가 되기 위한 규칙
	    1) public final static 상수  '만' 선언할 수 있다.
	    2) public abstract 리턴타입 메소드명();  '만' 선언할 수 있다. - 추상메소드
	    3) public default 리턴타입 메소드명() { }  '도' 추가할 수 있다. (jdk 1.8 이후) - 디폴트메소드
	    4) public static 리턴타입 메소드명() { }  '도' 추가할 수 있다. (jdk 1.8 이후) - 클래스메소드
	4. 작업지시서 역할을 수행한다.
	5. 인터페이스는 상속(extends) 받지 않고, 구현(implements)한다.
	6. 상속도 받고, 구현도 하면 => 다중 상속의 효과를 낼 수 있다.
	7. 여러 인터페이스의 다중 구현이 가능하다.
	    interface A { }
	    interface B { }
	    interface C implements A, B { }
*/
interface Animal{
	
	void move();  // 자동으로 public abstract void move(); 로 처리된다.
	
	// jdk 1.8 이후부터 사용 가능한 default 메소드
	default void eat(String food) {           // 자동으로 public 처리된다.
		System.out.println(food + " 먹는다.");
	}
}

class Dog implements Animal{
	
	@Override
	public void move() {	// 자식의 권한은 부모의 권한보다 커진다 ex) 부모 -> protected, 자식 -> protected, public!! 
		 System.out.println("개가 달린다.");
	}
}

public class Ex01_interface {

	public static void main(String[] args) {
		Animal animal = new Dog();
		
		animal.eat("개밥");
		animal.move();
	}

}

Ex02_interface

package com.mywork.ex;

interface Shape{
	
	double PI = 3.141592;    // public static double PI = 3.141592;
	double calcArea();       // public abstract double calcArea();
	void output();           // public abstract void output(); 
	
}

class Rect implements Shape{
	
	// Field
	private int width;
	private int height;
	
	// Constructor
	public Rect(int width, int height) {
		this.width = width;
		this.height = height;
	}
	
	// Method
	@Override
	public double calcArea() {
		return width * height;
	}
	
	@Override
	public void output() {
		System.out.println("너비 : " + width);
		System.out.println("높이 : " + height);
		System.out.println("크기 : " + calcArea());
	}
}

class Circle implements Shape{
	
	// Field
	private double radius;
	
	// Constructor
	public Circle(double radius) {
		this.radius = radius;
	}
	
	// Method
	@Override
	public double calcArea() {
		return PI * Math.pow(radius, 2);
	}
	
	@Override
	public void output() {
		System.out.println("반지름 : " + radius);
		System.out.println("크기 : " + calcArea());
	}
	
}
public class Ex02_interface {

	public static void main(String[] args) {
		Shape[] arr = new Shape[2];
		
		arr[0] = new Rect(2, 3);
		arr[0].output();
		
		arr[1] = new Circle(1.5);
		arr[1].output();
	}

}

Ex03_interface

package com.mywork.ex;

// 인터페이스명 : ~ 할 수 있는
interface Eatable {
	
	void eat();	// public abstract void eat();
	
}

class My{
	
	// Method
	public void dirty() {
		System.out.println("내껀 더럽지.");
	}
	
}

// 다중 상속 예
class Apple extends My implements Eatable{
	
	@Override
	public void eat() {
		System.out.println("사과는 아침에 먹는 게 좋다.");
	}
	
}

class Banana extends My implements Eatable{
	
	@Override
	public void eat() {
		System.out.println("바나나는 껍질은 드시지 마세요.");
	}
	
}

class Computer extends My{
	
}

public class Ex03_interface {

	public static void main(String[] args) {
		
		My[] list = new My[3];
		
		list[0] = new Apple();
		list[1] = new Banana();
		list[2] = new Computer();
		
		for(int i = 0; i < list.length; i++) {
			list[i].dirty();
			if(list[i] instanceof Eatable) {
				((Eatable)list[i]).eat();
			}
			
		}
		
	}

}
profile
시행착오, 문제해결 그 어디 즈음에.

0개의 댓글