728x90
Car
package sec05.exam01_field_polymorphism;
public class Car {
//필드값
//인스턴스만들어줌
//인스턴스인 Tire를 인터페이스 Trie로 구현된 HankookTire에 연결해줌
public Tire frontLeftTire = new HankookTire();
public Tire frontRightTire = new HankookTire();
//제한자 차이
Tire backLeftTire = new HankookTire();
Tire backRightTire = new HankookTire();
//브레이크추가
Number01_Brake num1 = new Number01_Brake();
Number02_Brake num2 = new Number02_Brake();
Brake brake01 = new Number01_Brake();
Pedal pedal01 = new Number02_Brake();
//Tire라는 배열이있는데
//tires라는 변수명으로 네개를 넣음 HankookTire를 몽땅
public Tire[] tires = {
new newHankookTire(),
new newHankookTire(),
new newHankookTire(),
new newHankookTire()
};
public void run() {
frontLeftTire.roll();
frontRightTire.roll();
backLeftTire.roll();
backRightTire.roll();
//개선된 for문 문법
//for(자료형 변수명 : 배열명){문장}
for(Tire tire : tires){
tire.roll();
}
System.out.println("--------------자식인 number01,02-------------------");
num1.push();
num1.stop();
num2.push();
num2.stop();
System.out.println("------------부모인 brake01----------------");
brake01.stop();
// brake01.push(); //push라는 메소드없었음
System.out.println("--------brake02-자식으로형변환-자식의push출력--------");
//형변환해서 push가 되지않는데 되게 만들기!
//자식클래스 변수 = (자식클래스) 부모클래스타입
//부모클래스타입 = 부모클래스변수
Number01_Brake brake02 = (Number01_Brake) brake01;
brake02.push();
System.out.println("------------부모인 pedal01----------------");
pedal01.push();
// pedal01.stop(); //stop이라는 메소드없었음
System.out.println("--------pedal02-자식으로형변환-자식의stop출력------------");
Number02_Brake pedal02 = (Number02_Brake) pedal01;
pedal02.stop();
}
}
개선된 for문 / 향상된 for문 / foreach문
for(자료형 변수명 : 배열명){ 문장 }
개선된 for문 설명 링크
https://java119.tistory.com/107
Tire
package sec05.exam01_field_polymorphism;
//인터페이스
public interface Tire {
//추상메소드
//강제성이있음
public void roll();
}
HankookTire
package sec05.exam01_field_polymorphism;
public class HankookTire implements Tire {
//override안써도되지만 씀.
//강제구현함
@Override
public void roll() {
System.out.println("HankookTire run!");
}
}
KumhoTire
package sec05.exam01_field_polymorphism;
public class KumhoTire implements Tire {
@Override
public void roll() {
System.out.println("KumhoTire run!");
}
}
newHankookTire
package sec05.exam01_field_polymorphism;
public class newHankookTire implements Tire {
@Override
public void roll() {
System.out.println("new!! HankookTire run!");
}
}
Brake
package sec05.exam01_field_polymorphism;
public interface Brake {
public void stop();
}
Pedal
package sec05.exam01_field_polymorphism;
public interface Pedal {
public void push();
}
Number01_Brake
package sec05.exam01_field_polymorphism;
public class Number01_Brake implements Brake, Pedal{
public void stop() {
System.out.println("Number1 브레이크 실행 끼이잉익");
}
public void push() {
System.out.println("Number1 페달 실행");
}
}
Number02_Brake
package sec05.exam01_field_polymorphism;
public class Number02_Brake implements Brake, Pedal{
public void stop() {
System.out.println("Number2 브레이크 실행 끼이잉익");
}
public void push() {
System.out.println("Number2 페달 실행");
}
}
CarExample = main
package sec05.exam01_field_polymorphism;
public class CarExample {
public static void main(String[] args) {
Car myCar = new Car();
myCar.run();
System.out.println("=========check001==========");
//객체를 바꾼다
myCar.frontLeftTire = new KumhoTire();
myCar.frontRightTire = new KumhoTire();
myCar.run();
System.out.println("===========check002=========");
myCar.tires[0] = new KumhoTire();
myCar.tires[1] = new KumhoTire();
myCar.run();
}
}
출력값
HankookTire run!
HankookTire run!
HankookTire run!
HankookTire run!
new!! HankookTire run!
new!! HankookTire run!
new!! HankookTire run!
new!! HankookTire run!
--------------자식인 number01,02-------------------
Number1 페달 실행
Number1 브레이크 실행
Number2 페달 실행
Number2 브레이크 실행
------------부모인 brake01----------------
Number1 브레이크 실행
--------brake02-자식으로형변환-자식의push출력--------
Number1 페달 실행
------------부모인 pedal01----------------
Number2 페달 실행
--------pedal02-자식으로형변환-자식의stop출력------------
Number2 브레이크 실행
=========check001==========
KumhoTire run!
KumhoTire run!
HankookTire run!
HankookTire run!
new!! HankookTire run!
new!! HankookTire run!
new!! HankookTire run!
new!! HankookTire run!
--------------자식인 number01,02-------------------
Number1 페달 실행
Number1 브레이크 실행
Number2 페달 실행
Number2 브레이크 실행
------------부모인 brake01----------------
Number1 브레이크 실행
--------brake02-자식으로형변환-자식의push출력--------
Number1 페달 실행
------------부모인 pedal01----------------
Number2 페달 실행
--------pedal02-자식으로형변환-자식의stop출력------------
Number2 브레이크 실행
===========check002=========
KumhoTire run!
KumhoTire run!
HankookTire run!
HankookTire run!
KumhoTire run!
KumhoTire run!
new!! HankookTire run!
new!! HankookTire run!
--------------자식인 number01,02-------------------
Number1 페달 실행
Number1 브레이크 실행
Number2 페달 실행
Number2 브레이크 실행
------------부모인 brake01----------------
Number1 브레이크 실행
--------brake02-자식으로형변환-자식의push출력--------
Number1 페달 실행
------------부모인 pedal01----------------
Number2 페달 실행
--------pedal02-자식으로형변환-자식의stop출력------------
Number2 브레이크 실행
Pedal에 default 만들어서 사용하는 예제
package sec05.exam01_field_polymorphism;
public interface Pedal {
public void push();
//default 인스턴스에서 실행가능한 코드
//인터페이스에서 사용가능한 코드
//default 리턴타입 메소드명 (매개변수...){...}
default void defaultmethod_install_pedal(Tire abc){
//같은지 비교 확인
if(abc instanceof HankookTire){
System.out.println("한국타이어세팅으로 변경합니다");
}else if (abc instanceof KumhoTire){
System.out.println("금호타이어세팅으로 변경합니다");
}else if(abc instanceof newHankookTire){
System.out.println("뉴한국타이어세팅으로 변경합니다");
}
}
}
이미지 출처 : 이것이자바다
728x90
'STUDY > JAVA' 카테고리의 다른 글
[JAVA] 22-07-07 인터페이스를 활용한 간식 먹기 문제 ☑ (0) | 2022.07.07 |
---|---|
[JAVA-이것이자바다.4장] 조건문과 반복문 확인 문제 (0) | 2022.07.06 |
[JAVA] 22-06-20 자바 Overloading / Overriding ☑ (0) | 2022.07.05 |
[JAVA] 인터페이스 ! 개념 이해 추가 정리 ☑ (0) | 2022.07.04 |
[JAVA] 22-07-01 인터페이스를 활용한 문제해결 (0) | 2022.07.01 |