Frog is cry
타입변환과다형성 본문
ex01
package 타입변환과다형성.ex01;
public class A {
}
package 타입변환과다형성.ex01;
public class B extends A{
}
package 타입변환과다형성.ex01;
public class C extends A{
}
package 타입변환과다형성.ex01;
public class D extends B{
}
package 타입변환과다형성.ex01;
public class E extends C{
}
package 타입변환과다형성.ex01;
public class Promotion_Ex {
public static void main(String[] args) {
B b = new B();
C c = new C();
D d = new D();
E e = new E();
A a1 = b;
A a2 = c;
A a3 = d;
A a4 = e;
B b1 = d;
C c1 = e;
// B b2 = e; e객체는 B와 전혀 연관이 없기에 변환안됨
// C c2 = d; d객체는 C와 전혀 연관이 없기에 변환안됨
}
}
ex02
package 타입변환과다형성.ex02;
public class Child_Ex {
public static void main(String[] args) {
Child child = new Child();
Parent parent = child; // 부모것의 parent를 불러와 child 값 대입
parent.method1();
// 부모한텐 있고 자식한텐 없어 부모것을 불러옴
parent.method2();
// 부모,자식 둘다 가지고 있지만 자식 것을 불러옴. 매우중요!!
// parent.method3();
// 부모에게 method3이 없어 불러올수가 없음
}
}
package 타입변환과다형성.ex02;
public class Child extends Parent{
@Override
public void method2() {
System.out.println("Child-method2(자식)");
}
public void method3() {
System.out.println("Child-method3(자식)");
}
}
package 타입변환과다형성.ex02;
public class Parent {
public void method1() {
System.out.println("Child-method1(부모)");
}
public void method2() {
System.out.println("Child-method2(부모)");
}
}
ex03
package 타입변환과다형성.ex03;
public class Car {
//필드
Tire frontLeftTire = new Tire("앞왼쪽", 6);
Tire frontRightTire = new Tire("앞오른쪽", 2);
Tire backLeftTire = new Tire("뒤왼쪽", 3);
Tire backRightTire = new Tire("뒤오른쪽", 4);
//생성자
//메소드
int run() {
System.out.println("[자동차가 달립니다.]");
if(frontLeftTire.roll() == false) {stop(); return 1;};
if(frontRightTire.roll() == false) {stop(); return 2;};
if(backLeftTire.roll() == false) {stop(); return 3;};
if(backRightTire.roll() == false) {stop(); return 4;};
return 0;
}
void stop() {
System.out.println("[자동차가 멈춥니다.]");
}
}
package 타입변환과다형성.ex03;
public class Car_Ex {
public static void main(String[] args) {
Car car = new Car();
for (int i = 0; i <=5; i++) {
int problemlocation = car.run();
switch(problemlocation) {
case 1:
System.out.println("앞 왼쪽 HankkokTire로 교체");
car.frontLeftTire = new HankookTire("앞 왼쪽", 15);
// 자식 객체를 부모타입에 넣어 타입변환을 함
break;
case 2:
System.out.println("앞 오른쪽 KumhoTire로 교체");
car.frontRightTire = new KumhoTire("앞 오른쪽", 13);
// 자식 객체를 부모타입에 넣어 타입변환을 함
break;
case 3:
System.out.println("뒤 왼쪽 HankookTire로 교체");
car.backLeftTire = new HankookTire("뒤 왼쪽", 14);
// 자식 객체를 부모타입에 넣어 타입변환을 함
break;
case 4:
System.out.println("뒤 오른쪽 KumhoTire로 교체");
car.backRightTire = new HankookTire("뒤 오른쪽", 17);
// 자식 객체를 부모타입에 넣어 타입변환을 함
break;
}
System.out.println("-----------------");
}
}
}
package 타입변환과다형성.ex03;
public class Tire {
//필드
public int maxRotation; // 최대 회전수(최대 수명)
public int accumulatedRotation; // 누적 회전수
public String location; // 타이어의 위치
//생성자
public Tire(String location, int maxRotation) {
this.location = location;
this.maxRotation = maxRotation;
}
//메소드
public boolean roll() { // 회전할 수 있다면 true 할수 없다면 false를 해서 종료 시키기 위해 boolean을 사용함
++accumulatedRotation;
if(accumulatedRotation<maxRotation) {
System.out.println(location + "Tire 수명 : " + (maxRotation - accumulatedRotation) + "회");
return true;
}else {
System.out.println("*** " + location + "Tire 펑크 ***");
return false;
}
}
}
package 타입변환과다형성.ex03;
public class KumhoTire extends Tire{
//필드
//생성자
public KumhoTire(String location, int maxRocation) {
super(location, maxRocation);
}
//메소드
@Override
public boolean roll() {
++accumulatedRotation;
if(accumulatedRotation<maxRotation) {
System.out.println(location + "KumhoTire 수명 : " + (maxRotation - accumulatedRotation) + "회" );
return true;
}else {
System.out.println("*** " + location + "KumhoTire 펑크 ***");
return false;
}
}
}
package 타입변환과다형성.ex03;
public class HankookTire extends Tire {
//필드
//생성자
public HankookTire(String location, int maxRocation) {
super(location, maxRocation);
}
//메소드
@Override
public boolean roll() {
++accumulatedRotation;
if(accumulatedRotation<maxRotation) {
System.out.println(location + "HankookTire 수명 : " + (maxRotation - accumulatedRotation) + "회" );
return true;
}else {
System.out.println("*** " + location + "HankookTire 펑크 ***");
return false;
}
}
}
ex04
package 타입변환과다형성.ex03;
public class HankookTire extends Tire {
//필드
//생성자
public HankookTire(String location, int maxRocation) {
super(location, maxRocation);
}
//메소드
@Override
public boolean roll() {
++accumulatedRotation;
if(accumulatedRotation<maxRotation) {
System.out.println(location + "HankookTire 수명 : " + (maxRotation - accumulatedRotation) + "회" );
return true;
}else {
System.out.println("*** " + location + "HankookTire 펑크 ***");
return false;
}
}
}
package 타입변환과다형성.ex04;
public class Taxi extends Vehicle{
public void run() {
System.out.println("택시가 달립니다");
}
}
package 타입변환과다형성.ex04;
public class Driver {
public void driver(Vehicle vehicle) {
vehicle.run();
}
}
package 타입변환과다형성.ex04;
public class Driver_Ex {
public static void main(String[] args) {
Driver driver = new Driver();
Vehicle vehicle = new Vehicle();
driver.driver(vehicle);
Bus bus = new Bus();
driver.driver(bus);
Taxi taxi = new Taxi();
driver.driver(taxi);
}
}
package 타입변환과다형성.ex04;
public class Bus extends Vehicle{
public void run() {
System.out.println("버스가 달립니다");
}
}
ex05
package 타입변환과다형성.ex05_casting;
public class Parent {
public String field1;
public void method1() {
System.out.println("Parent-method1()");
}
public void method2() {
System.out.println("Parent-method2()");
}
}
package 타입변환과다형성.ex05_casting;
public class Child extends Parent{
public String field2;
public void method3() {
System.out.println("Child-method3()");
}
}
package 타입변환과다형성.ex05_casting;
public class Child_Ex {
public static void main(String[] args) {
Parent parent = new Child();
parent.field1 = "data1";
parent.method1();
parent.method2();
// 캐스팅 전
// parent.field2; 생성불가
// 자식 객체가 부모 타입으로 대입이 되고나서 다시 자식 객체로 대입이 필요할떄
// 이와같이 강제타입을 해서 값을 얻어내야함
Child child = (Child) parent;
child.field2 = "data2";
child.method3();
}
}
ex06
package 타입변환과다형성.ex06_instanceof;
public class Parent {
}
package 타입변환과다형성.ex06_instanceof;
public class Child extends Parent{
}
package 타입변환과다형성.ex06_instanceof;
public class Instanceof_Ex {
public static void main(String[] args) {
// Parent parent = new Parent();
//
// if(parent instanceof Child) {
// Child child = (Child) parent;
// }else {
// System.out.println("11");
// }
Parent parentA = new Child();
method1(parentA);
Parent parentB = new Parent();
method1(parentB);
}
public static void method1(Parent parent) {
if(parent instanceof Child) {
Child child = (Child)parent;
System.out.println("method1 - Child로 변환 성공");
}else {
System.out.println("method1 - Child로 변환되지 않음");
}
}
}
'JAVA > 복습' 카테고리의 다른 글
인터페이스 (0) | 2020.07.22 |
---|---|
추상클래스 (0) | 2020.07.22 |
메소드 재정의(오버라이딩) (0) | 2020.07.22 |
getter_setter (0) | 2020.07.22 |
싱글톤, 파이널 (0) | 2020.07.20 |
Comments