Beny's Study
13_2. [강의] 다형성1 예제 본문
supper class _ Car
package com.kh.ex02.poly_example;
public class Car {
//속성부(필드)
protected int cc = 0; //cc는 배기량
//생성자(인자있는 생성자)
public Car(int cc) {
this.cc = cc;
}
public void oilling() {
System.out.println("주유중 입니다.");
}
public void move() {
System.out.println("부릉부릉");
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("Name : " + this.getClass().getSimpleName());
sb.append(", cc : " + cc);
return sb.toString();
}
}
Override
오버라이드: 메서드의 이름이 같고, 매개변수가 같고, 반환형이 같은 경우에 상속받은 메서드를 덮어쓴다'
StringBuffer
문자열을 추가하거나 변경할때 사용하는 자료형
this.getClass().getSimpleName());
getClass에서getSimpleName을 가져온다,
getSimpleName으로 찍으면 class이름이 찍힌다 라는 특별한 메소드
childclass _ Sonata
package com.kh.ex02.poly_example;
public class Sonata extends Car{
//부모클래스Car을 상속받는다.
//소나타에 빨간줄 뜬다 why? 부모클래스에 생성자가 없어서 빨간줄뜬다!
//--> 여기에서 인자있는 생성자로 선언해 줘야 한다.
//인자있는 생성자 생성
public Sonata() {
super(2000); // 2000 CC
}
@Override//생성
public void oilling() {
System.out.println("휘발유를 주유중입니다.");
}
@Override//생성
public void move() {
System.out.println("부르르르르릉");
}
//추가로 sonataNickName라는 메소드 하나 더 생성함.
public void sonataNickName() {
System.out.println("소나 타는 차"); // 실제 이름의 유례, 고 정주영 회장님의...
}
}
childclass _Grandure
package com.kh.ex02.poly_example;
public class Grandure extends Car {
// 부모클래스Car을 상속받는다,
// 그랜저에 빨간줄 뜬다 why? 부모클래스에 생성자가 없어서 빨간줄뜬다!
// --> 여기에서 인자있는 생성자로 선언해 줘야 한다.
public Grandure() {
super(3000); // 3000cc
}
@Override//생성
public void oilling() {
System.out.println("휘발유를 주유중입니다.");
}
@Override//생성
public void move() {
System.out.println("(조용한)부르르르르릉");
}
//추가로 grandureNickName라는 메소드 하나 더 생성함.
public void grandureNickName() {
System.out.println("각그랜저");
}
}
childclass _Avante
package com.kh.ex02.poly_example;
public class Avante extends Car {
//부모클래스Car을 상속받는다,
//아반테에 빨간줄 뜬다 why? 부모클래스에 생성자가 없어서 빨간줄뜬다!
//--> 여기에서 인자있는 생성자로 선언해 줘야 한다.
//인자있는 생성자
public Avante() {
super(1600); // 아반떼는 1600cc 이다.
}
//오버라이드 생성.
@Override
public void oilling() {
System.out.println("휘발유를 주유중입니다.");
}
//추가로 avanteNickName라는 메소드 하나 더 생성함.
public void avanteNickName() {
System.out.println("아방이");
}
}
childclass _BMWM5
package com.kh.ex02.poly_example;
public class BMWM5 extends Car {
// 부모클래스Car을 상속받는다,
// BMWM5에 빨간줄 뜬다 why? 부모클래스에 생성자가 없어서 빨간줄뜬다!
// --> 여기에서 인자있는 생성자로 선언해 줘야 한다.
public BMWM5() {
super(4395); // cc가 커지면 배기량 올라감 = 힘, 토크, 마력
}
@Override // 생성
public void oilling() {
System.out.println("고급 휘발유를 주유중입니다.");
System.out.println("기름을 땅바닥에 뿌립니다.");
}
@Override // 생성
public void move() {
System.out.println("부와와와와와왕아아아앙앙(시끄럽게)");
}
//새로운 doc3sa라는 메서드 생성
void doc3sa() { // 독삼사 = BMW, 벤츠, 아우디
System.out.println("나는 독일에서 온 자동차야.");
}
}
Run
package com.kh.ex02.poly_example;
import java.util.Arrays;
//tip: 클래스 이름 생성할때 맨앞에 언더바 붙이면 패키지 내에 1번으로 뜸( 자주쓰는 방법은 아님)
public class _Run {
public static void main(String[] args) {// 메인메소드
Car[] carArray = new Car[5]; // carArray의 Car객체배열의 길이는 5이다
System.out.println(Arrays.toString(carArray));// [null, null, null, null, null]값 출력됨( 빈공간, 초기화이니까)
// 객체배열의 칸에다가 값을 넣음-> 클래스이름넣은것?
// 사용자한테 5개의 차종을(메소드) 입력받음
carArray[0] = new Car(1000); // 사제 자동차
carArray[1] = new Avante();
carArray[2] = new Sonata();
carArray[3] = new Grandure();
carArray[4] = new BMWM5();
for (int i = 0; i < carArray.length; i++) {
printCar(carArray[i]);// 위에서 받은 메소드를 printCar라는 메소드로 넘겨서 출력하는 법
}
}
// 위에서 만든 printCar메소드
private static void printCar(Car car) { // 인자가 다형성 속성을 사용중
System.out.println(car.toString());
car.move(); // 동적 바인딩 : 실행 전에 호출될 메소드를 정하지 않고,
// 실행 후 실시간(동적)으로 메소드를 호출하는 방법
// 즉 위에서 받은5개의 객체배열을 주석처리 한 후 돌렸을때 , car.move()는 5개중 누구의 값이 올지 예측이 불가능하다
car.oilling();
if (car instanceof Avante) {// 만약, 아반떼를 car인스턴스하면
((Avante) car).avanteNickName(); // 아반떼를 car에 캐스팅 하고 . 아반떼 닉네임 가져온다(class간 type casting하는 방법)
}
if (car instanceof Sonata) {
((Sonata) car).sonataNickName();
}
if (car instanceof Grandure) {
((Grandure) car).grandureNickName();
}
if (car instanceof BMWM5) {
((BMWM5) car).doc3sa();
}
System.out.println("--------------------------------------");
}//위에 닉네임이 넘 많고 다 개별로 지정해주고 해야되는데 이걸 좀더 그룹화해서 간단하게 하기위해서?! ex03으로
}
"본 인터넷 사이트 내의 모든 이미지, 문구, 콘텐츠, 내용 등에 대한 저작권은 76beny에게 있습니다.
이를 무단으로 도용, 복사, 전재, 재배포, 2차 변형 등을 할 경우
민, 형사상 법적 조치 등 저작권법에 의거하여 처벌 받을 수 있습니다."
'[JAVA] > 09. 다형성' 카테고리의 다른 글
13_3. [강의] 다형성2 예제(추상클래스 이용) (0) | 2022.05.29 |
---|---|
13_1. [강의] 다형성 기본문법 (0) | 2022.05.29 |
12. 내부클래스(클래스안의 클래스) (0) | 2022.04.27 |
11. deafult메서드&static메서드 (0) | 2022.04.27 |
10. 다형성코드예제 ver.3( 인터페이스 추가해보기) (0) | 2022.04.15 |