본문 바로가기
강의

0113 Java lec07 chap08[인터페이스]인터페이스+타입 변환과 다형성p369~403

by IT새내기IM 2023. 1. 13.

개념정리 p402

인터페이스 : (추상클래스과정을 줄인느낌임)

//3번째0프로젝트에서 쓰일 내용

기본 형태

public interface RemoteControl {

//상수

public 타입 Max_VOLUME = 값; //클래스에서는 10이 초기값인 변수지만 인터페이스에서는 변수 선언시 상수가됨.

//무조건 추상메소드가 되기때문에 실행부분은없음 무조건 재정의

public 타입 메소드이름(매개변수,.....);

}

private static void printSound(Soundable s) { //Soundable 인터페이스 타입을 객체 생성해서 매개변수로 줄수있음

 

인터페이스를 상속받을때는 extends 가 아닌  class 자식클래스명 implements 인터페이스명으로 상속

같은 인터페이스끼리 상속일때는 extends로 함 (public interface 하위인터 extends 상위인터1,상위인터2{}

public Class T extends C implements 111,222{} 

위와 같이 extends 는 하나만 상속가능하고  implements 두개 상속가능

 

개념정리 Page384

 

 

 

 

RemoteControl TV Audio Test Page376 인터페이스 예제

package ex01;

public interface RemoteControl {

	//상수
	public int MAX_VOLUME = 10; //클래스에서는 10이 초기값인 변수지만 인터페이스에서는 변수 선언시 상수가됨.
	public int MIN_VOLUME = 0;
	
	//추상 메소드
	public void turnOn();
	public void turnOff();
	public void setVolume(int v);
	
}

package ex01;

public class A implements RemoteControl {

	private int volume;
	@Override
	public void turnOn() {
		System.out.println("Audio를 켭니다.");
	}

	@Override
	public void turnOff() {
		System.out.println("Audio를 끕니다.");
	}

	@Override
	public void setVolume(int v) {
		if(v>RemoteControl.MAX_VOLUME) {
			this.volume = RemoteControl.MAX_VOLUME;
		}else if(v < RemoteControl.MIN_VOLUME) {
			this.volume = RemoteControl.MIN_VOLUME;
		}else {
			this.volume = v;
		}
		System.out.println("현재 오디오 소리:"+this.volume);
	}

}

package ex01;

public class T implements RemoteControl,Searchable{

	private int volume;
	
	@Override
	public void turnOn() {
		System.out.println("TV를 켰음");
	}

	@Override
	public void turnOff() {
		System.out.println("TV를 끄다");
	}

	@Override
	public void setVolume(int v) {
		if(v>RemoteControl.MAX_VOLUME) {
			this.volume = RemoteControl.MAX_VOLUME;
		}else if(v < RemoteControl.MIN_VOLUME) {
			this.volume = RemoteControl.MIN_VOLUME;
		}else {
			this.volume = v;
		}
		System.out.println("현재 티비 소리:"+this.volume);
		
		
	} //부모로부터 get 물려받은것

	@Override
	public void search(String url) {
		System.out.println(url+"을검색합니다.");
	}


//	public void setVolume(int volume) {
//		this.volume = volume;
//	}
//	 내가 받은 set
}

package ex01;

public class Test {

	public static void main(String[] args) {
		RemoteControl r;
		Searchable s; //new 연산자가 안되는것이지 객체 생성가능.
		
		//이 떄는 다형성을 위할때 이렇게쓰임.
		r = new T();
		r.turnOn();
		s= new T();
		s.search("어어어");
		r.setVolume(15);
		r.turnOff();
		
		///상속받은놈은 다 쓸수있음
		T t = new T();
		t.turnOn();
		t.setVolume(8);
		t.search("mbc 채널");
		t.turnOff();
		
		
		
		r = new A();
		r.turnOn();
		r.setVolume(-2);
		r.turnOff();
	}
}

인터페이스 Searchable    Page378~379 앞의 인터페이스예제와 결합 

package ex01;

public interface Searchable {
	void search(String url);
}

Q03 Page385 Soundable Dog Cat Test

 

package ex02;

public interface Soundable {
	String sound();
	void sound2();
	int sound3();
}

package ex02;

public class Cat implements Soundable {

	@Override
	public String sound() {
		return "야옹";
	}

	@Override
	public void sound2() {
		System.out.println("야옹");
	}
	@Override
	public int sound3() {
		return 1;
	}
}

package ex02;

public class Dog implements Soundable {

	@Override
	public String sound() {
		return "멍멍";
	}

	@Override
	public void sound2() {
		System.out.println("멍멍");
	}
	@Override
	public int sound3() {
		// TODO Auto-generated method stub
		return 0;
	}	
	
}

package ex02;

public class Test {

	public static void main(String[] args) {
		printSound(new Cat());
		printSound(new Dog());
		
		printSound2(new Cat());
		printSound2(new Dog());
		
		printSound3(new Cat());
	}
	
	private static void printSound(Soundable s) {   //Soundable 인터페이스 타입의 매개변수를 가지고있음
		System.out.println(s.sound());
	}
	private static void printSound2(Soundable s) {   //Soundable 인터페이스 타입의 매개변수를 가지고있음
		s.sound2();
	}
	private static void printSound3(Soundable s) {   //Soundable 인터페이스 타입의 매개변수를 가지고있음
		if(s.sound3() == 2) {
			System.out.println("야옹");
		}else {
			System.out.println("멍멍");
		}
	}

}

인터페이스 Tire 클래스 H  K Car  메인메서드 Test 필드다형성 P390

package ex03;

public interface Tire {
	public void roll();
}

package ex03;

public class H implements Tire {

	@Override
	public void roll() {
		System.out.println("한국 타이어가 굴러갑니다.");
	}

}

package ex03;

public class K implements Tire {

	@Override
	public void roll() {
		System.out.println("금호 타이어가 굴러갑니다.");
	}
	
}

package ex03;

public class Car {
	Tire fl = new H();
	Tire fr = new H();
	
	Tire bl = new K();
	Tire br = new K();
	
	void run() {
		fl.roll();
		fr.roll();
		bl.roll();
		br.roll();
	}
}

package ex03;

public class Test {

	public static void main(String[] args) {
		Car c = new Car();
		
		c.run();
		
		System.out.println("==============");
		
		c.bl = new H();
		c.br = new H();
			
		c.run();
	}
}

인터페이스 Vehicle 상속받은넘 Bus taxi 클래스 driver Test   Paga395

package ex04;

public interface Vehicle {
	public void run();
}

package ex04;

public class Bus implements Vehicle {

	@Override
	public void run() {
		System.out.println("버스가 달려");
	}

}

package ex04;

public class Taxi implements Vehicle {

	@Override
	public void run() {
		System.out.println("택시가 달려");
	}

}

package ex04;

public class Driver {
	public void drive(Vehicle v) {
		v.run();
	}
}

package ex04;

public class Test {

	public static void main(String[] args) {
		Driver d = new Driver();
		Vehicle a = new Bus();
		Vehicle a2 = new Taxi();
		
		d.drive(a);
		d.drive(a2);	
	}
}

+

drive3(new Bus());

drive3(new Taxi());

}

public static void drive3(Vehicle v) {

v.run();

}

 

댓글