개념정리 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();
}
'강의' 카테고리의 다른 글
0113 JSP lec01 (0) | 2023.01.16 |
---|---|
0113 Java lec07 chap09~ (0) | 2023.01.13 |
0113 Java lec07 chap07[상속] 추상클래스 p357~ (0) | 2023.01.12 |
0112 Java lec06 chap07[상속]상속 + 타입 변환과 다형성 p310~356 (0) | 2023.01.11 |
0111 Java lec05 chap06[클래스]메소드+인스턴스멤버와 정적멤버 (singleton)+패키지와 접근 제한자 p268~307 (0) | 2023.01.11 |
댓글