: λ€λ₯Έ ν΄λμ€(λΆλͺ¨ν΄λμ€)κ° κ°μ§κ³ μλ λ©€λ²(νλ, λ©μλ)λ€μ μλ‘ μμ±ν ν΄λμ€(μμ ν΄λμ€)μμ μ§μ λ§λ€μ§ μκ³ μμμ λ°μμΌλ‘μ¨ μ ν΄λμ€κ° μμ μ λ©€λ²μ²λΌ μ¬μ©ν μ μλ κΈ°λ₯
-> λΆλͺ¨ κ°μ²΄λ₯Ό μμ κ°μ²΄ μμ μμ±νμ¬ μμκ°μ²΄λ₯Ό λΆλͺ¨κ°μ²΄λ₯Ό μμ κ² μ²λΌ μ¬μ©ν μ μλ€.
λͺ©μ :
ν΄λμ€μ μ¬μ¬μ©, μ°κ΄λ μΌλ ¨μ ν΄λμ€λ€μ λν 곡ν΅μ μΈ κ·μ½ μ μ(μ€λ²λΌμ΄λ©)
μ₯μ :
1) λ³΄λ€ μ μ μμ μ½λλ‘ μλ‘μ΄ ν΄λμ€ μμ± κ°λ₯
2) μ½λλ₯Ό 곡ν΅μ μΌλ‘ κ΄λ¦¬νκΈ° λλ¬Έμ μ½λμ μΆκ° λ° λ³κ²½ μ©μ΄
3) μ½λμ μ€λ³΅μ μ κ±°νμ¬ νλ‘κ·Έλ¨μ μμ°μ±κ³Ό μ μ§λ³΄μμ ν¬κ² κΈ°μ¬
λͺ¨λ ν΄λμ€λ Objectν΄λμ€μ νμμ΄λ€.
Objectν΄λμ€κ° μ 곡νλ λ©μλλ₯Ό μ€λ²λΌμ΄λ©νμ¬ λ©μλμ μ¬κ΅¬νμ΄ κ°λ₯νλ€.
ex) java.lang.String ν΄λμ€μ equals()μ toString()..
λΆλͺ¨ν΄λμ€μ μμ±μ, μ΄κΈ°ν λΈλ‘μ μμ μ λ¨
μμ ν΄λμ€ μμ± μ, λΆλͺ¨ ν΄λμ€ μμ±μκ° λ¨Όμ μ€νλλ€.
λ§μ½ μμ ν΄λμ€ μμ±μ μμμ λΆλͺ¨ ν΄λμ€ μμ±μ νΈμΆμ λͺ
μνκ³ μΆμΌλ©΄ super() νμ©ν΄μΌνλ€.
λΆλͺ¨μ privateλ©€λ²λ μμμ λμ§λ§ μ§μ μ μ κ·Ό λΆκ°νλ€.
μμ κ°μ²΄ μμ± μμ λΆλͺ¨μ νλ κ°λ μ λ¬ λ°μ κ²½μ°,
μμ μμ±μ μμμ λΆλͺ¨μ private νλμ μ§μ μ κ·Όνμ¬ λμ
λΆκ°νλ°, μ΄λ΄ κ²½μ°μλ
1) super() μ΄μ©νμ¬ μ λ¬λ°μ λΆλͺ¨ νλ κ°μ λΆλͺ¨ μμ±μ μͺ½μΌλ‘ λ겨μ μμ±νκ±°λ
2) setter, getter λ©μλλ₯Ό μ΄μ©νμ¬ μ κ·Όν΄μΌν¨.
: λΆλͺ¨ κ°μ²΄μ μμ±μλ₯Ό νΈμΆνλ λ©μλμ΄λ€.
: νμ ν΄λμ€ μμ±μ μμλ λΆλͺ¨ μμ±μλ₯Ό νΈμΆνλ super()κ° μ²« μ€μ μ‘΄μ¬ν΄μΌνλ€. (λΆλͺ¨ μμ±μκ° κ°μ₯ λ¨Όμ μ€νλμ΄μΌ νκΈ° λλ¬Έμ λͺ
μμ μΌλ‘ μμ± μμλ λ°λμ 첫 μ€μλ§ μμ±)
: 맀κ°λ³μκ° μλ λΆλͺ¨ μμ±μ νΈμΆμ super(맀κ°λ³μ, 맀κ°λ³μ...)λ₯Ό λ£μΌλ©΄ λ¨
: μμμ ν΅ν μμ ν΄λμ€ μ μ μ ν΄λΉ μμ ν΄λμ€μ λΆλͺ¨ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μ°Έμ‘°λ³μ
μμ ν΄λμ€ λ΄μμ λΆλͺ¨ ν΄λμ€ κ°μ²΄μ μ κ·Όνμ¬ νλλ λ©μλ νΈμΆ μ μ¬μ©
: over - μ/μμ λΌλ λ»λ μμ -> overridingμ μμ μ¬λΌνλ€λΌκ³ μκ°νκΈ°
: μμ ν΄λμ€κ° μμ λ°μ λΆλͺ¨ λ©μλλ₯Ό μ¬μμ± νλ κ²(μ¬μ μ)
: λΆλͺ¨κ° μ 곡νλ κΈ°λ₯μ νμμ΄ μΌλΆ κ³ μ³ μ¬μ©νκ² λ€λ μλ―Έλ‘ μμ κ°μ²΄λ₯Ό ν΅ν μ€ν μ νμ κ²μ΄ μ°μ κΆμ κ°μ§
: λ©μλ μ΄λ¦μ΄ λμΌν΄μΌν¨
: 맀κ°λ³μμ κ°μ, νμ
, μμ λͺ¨λ λμΌν΄μΌν¨
: λ¦¬ν΄ νμ
μ΄ λμΌν΄μΌν¨
: πprivate λ©μλλ μ€λ²λΌμ΄λ© λΆκ°ν¨.
β Person ν΄λμ€(λΆλͺ¨ ν΄λμ€)
package edu.kh.inheritance.model.vo;
public class Person {
// νλ
private String name; // μ΄λ¦
private int age; // λμ΄
private String nationality; // κ΅μ
// μμ±μ
public Person() {} // κΈ°λ³Έμμ±μ
public Person(String name, int age, String nationality) { // 맀κ°λ³μ μμ±μ -> μ€λ²λ‘λ©
this.name = name;
this.age = age;
this.nationality = nationality;
}
// λ©μλ(getter/setter)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getNationality() {
return nationality;
}
public void setNationality(String nationality) {
this.nationality = nationality;
}
public void breath() {
System.out.println("μ¬λμ μ½λ μ
μΌλ‘ μ¨μ μ°λ€");
}
public void move() {
System.out.println("μ¬λμ μμ§μΌ μ μλ€.");
}
@Override
public String toString() {
return name + "/" + age + "/" + nationality;
}
}
β Student ν΄λμ€(μμ ν΄λμ€)
package edu.kh.inheritance.model.vo;
public class Student extends Person {
// Student ν΄λμ€μ Person ν΄λμ€μ λ΄μ©μ μ°μ₯νλ€.
// Student ν΄λμ€μ Person ν΄λμ€μ λ΄μ©(νλ, λ©μλ)μ μΆκ°νμ¬ νμ₯νλ€.
// ***μμ‘***
// extends : νμ₯νλ€, μ°μ₯νλ€...
// private String name;
// private int age;
// private String nationality;
private int grade; // νλ
private int classRoom; // λ°
public Student() {
// Student() κ°μ²΄ μμ± μ
// λ΄λΆμ μμλ°μ Person κ°μ²΄λ₯Ό μμ±νκΈ°μν
// Person μμ±μ νΈμΆ μ½λ νμνλ€!
// super : μμ
// νμ¬ Studentμ suepr == Person
super(); // super() μμ±μ
// λΆλͺ¨μ μμ±μλ₯Ό νΈμΆνλ μ½λλ‘
// λ°λμ μμμ μμ±μ μ΅μλ¨μ μμ±λμ΄μΌνλ€.
// λΆλͺ¨μ μμ±μ μ€ν(νλ μ΄κΈ°ν+νΉμ κΈ°λ μν)
// * super() μμ±μ λλ¬Έμ
// μμ κ°μ²΄ λ΄λΆμ λΆλͺ¨κ°μ²΄κ° μμ±λλ€!
// * super() μμ±μ λ―Έμμ±μ
// μ»΄νμΌλ¬κ° μ»΄νμΌ λ¨κ³μμ μλμΌλ‘ μΆκ°ν΄μ€.
}
public Student(String name, int age, String nationality, int grade, int classRoom) {
// this.name = name;
// this.age = age;
// this.nationality = nationality;
// μ? λΆλͺ¨μ νλμ private μ κ·Όμ νμκ° μμ΄μ
// μ무리 λ¬Όλ €λ°μ μμμ΄λΌλ λ€λ₯Έ κ°μ²΄μ΄κΈ° λλ¬Έμ μ§μ μ κ·Ό λΆκ°
// λΆλͺ¨μ setterλ₯Ό μ΄μ©ν μ μμ§λ§ λͺ¨λ μμ±νκΈ°μλ λΉν¨μ¨μ μ΄λ€.
super(name, age, nationality); // λΆλͺ¨μ 맀κ°λ³μ μμ±μ νΈμΆ
this.grade = grade;
this.classRoom = classRoom;
}
// public String getName() {
// return name;
// }
//
// public void setName(String name) {
// this.name = name;
// }
//
// public int getAge() {
// return age;
// }
//
// public void setAge(int age) {
// this.age = age;
// }
//
// public String getNationality() {
// return nationality;
// }
//
// public void setNationality(String nationality) {
// this.nationality = nationality;
// }
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public int getClassRoom() {
return classRoom;
}
public void setClassRoom(int classRoom) {
this.classRoom = classRoom;
}
@Override
public String toString() {
return super.toString() + "/" + grade + "/" + classRoom;
}
}
β Employee ν΄λμ€(μμ ν΄λμ€)
package edu.kh.inheritance.model.vo;
public class Employee extends Person{
// private String name;
// private int age;
// private int nationality;
private String company;
public Employee() {}
public Employee(String name, int age, String nationality, String company) {
// this.name = name;
// this.age = age;
// this.nationality = nationality;
this.company = company;
}
// public String getName() {
// return name;
// }
//
// public void setName(String name) {
// this.name = name;
// }
//
// public int getAge() {
// return age;
// }
//
// public void setAge(int age) {
// this.age = age;
// }
//
// public String getNationality() {
// return nationality;
// }
//
// public void setNationality(String nationality) {
// this.nationality = nationality;
// }
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
// PersonμΌλ‘ λΆν° μμλ°μ λ©μλ μ€
// move() λ©μλλ₯Ό Employeeμ λ§κ² μ¬μ μ(==μ€λ²λΌμ΄λ©)
//@Override μ΄λ
Έν
μ΄μ
: ν΄λΉ λ©μλκ° μ€λ²λΌμ΄λ© λμμμ μ»΄νμΌλ¬μκ² μλ €μ£Όλ μν
// -> μ»΄νμΌλ¬μκ² λ¬Έλ² μ²΄ν¬λ₯Ό νλλ‘ μλ¦°λ€.
// μ΄λ
Έν
μ΄μ
(Annotation) : μ»΄νμΌλ¬μκ² μλ €μ£ΌκΈ° μν μ½λ(μ»΄νμΌλ¬ μΈμμ© μ£Όμ)
@Override
public void move(){
System.out.println("μ€λ²λΌμ΄λ© λ move()");
System.out.println("ν¨μ¨μ μΌλ‘ 빨리 μΌνκ³ μμ§μΈλ€.");
}
@Override
public String toString() {
return super.toString() + "/" + company;
}
}
β InheritanceService ν΄λμ€(μ€νν΄λμ€)
package edu.kh.inheritance.model.service;
import java.util.Scanner;
import edu.kh.inheritance.model.vo.Employee;
import edu.kh.inheritance.model.vo.Person;
import edu.kh.inheritance.model.vo.Student;
public class InheritanceService {
public void ex1() { // μμ νμΈ μμ
// Personμ μμλ°μ Studentκ° Personμ νλ, λ©μλλ₯Ό μ¬μ©ν μ μλκ°?
Person p = new Person();
//p.name = "νκΈΈλ"; // private λλ¬Έμ μ§μ μ κ·Ό λΆκ°(μλ¬λ°μ) -> getter setter μ¬μ©ν΄μΌν¨
p.setName("νκΈΈλ");
p.setAge(25);
p.setNationality("λνλ―Όκ΅");
System.out.println(p.getName());
System.out.println(p.getAge());
System.out.println(p.getNationality());
System.out.println("==============================");
// Student κ°μ²΄ μμ±
Student std = new Student();
// Studentλ§μ κ³ μ νλ
std.setGrade(3);
std.setClassRoom(5);
// Person ν΄λμ€λ‘λΆν° μμλ°μ νλ, λ©μλ
std.setName("κ³ κΈΈλ");
std.setAge(19);
std.setNationality("λνλ―Όκ΅");
System.out.println(std.getGrade());
System.out.println(std.getClassRoom());
// Studentκ° Personμ λ©μλ λΏ μλλΌ νλλ μμ λ°μλμ§ νμΈ
System.out.println(std.getName());
System.out.println(std.getAge());
System.out.println(std.getNationality());
System.out.println("==============================");
Employee emp = new Employee();
emp.setCompany("khμ 보κ΅μ‘μ");
// Personν΄λμ€λ‘λΆν° μμλ°μ λ©μλ
emp.setName("μ΅μ§μ");
emp.setAge(30);
emp.setNationality("λνλ―Όκ΅");
System.out.println(emp.getCompany());
System.out.println(emp.getName());
System.out.println(emp.getAge());
System.out.println(emp.getNationality());
// μΆκ°λ breathλ©μλ μμ νμΈνκΈ°
p.breath();
std.breath();
emp.breath();
// μμμ νΉμ§ : μ½λ μΆκ° λ° μμ μ μ©μ΄ν¨
// -> λΆλͺ¨μκ² μ μνλ©΄ μμλ°μ μμλ€μ λͺ¨λ λΆλͺ¨μ κ²μ κ·Έλλ‘ λ°μμ μΈ μ μμ
}
// super() μμ±μ μ¬μ© λ°©λ²
public void ex2() {
// Student 맀κ°λ³μ 5κ°μ§λ¦¬ μμ±μ
Student std = new Student("κΉμ² μ", 17, "νκ΅", 1, 3);
System.out.println(std.getName());
System.out.println(std.getAge());
System.out.println(std.getNationality());
System.out.println(std.getGrade());
System.out.println(std.getClassRoom());
}
public void ex3() { // μ€λ²λΌμ΄λ© νμΈ μμ
Student std = new Student();
Employee emp = new Employee();
std.move(); // μ€λ²λΌμ΄λ©x -> Personμ λ©μλ μν
emp.move(); // μ€λ²λΌμ΄λ©γ
-> Employeeμ λ©μλ μν
}
public void ex4() {
// λͺ¨λ ν΄λμ€λ Object ν΄λμ€μ νμ
// == λͺ¨λ ν΄λμ€μ μ΅μμ λΆλͺ¨λ Object
// classλͺ
μ Objectμλν μμκ΅¬λ¬Έμ΄ μλ€λ©΄ μ»΄νμΌλ¬κ° μλμΌλ‘ extends Objectꡬ문μ μΆκ°ν΄μ€
Person p = new Person();
// Object λ₯Ό μμλ°μ Person κ°μ²΄ μμ±
Student std = new Student();
// Personμ μμλ°μ Student κ°μ²΄ μμ±
// Object - Person - Student
System.out.println(p.hashCode());
System.out.println(std.hashCode());
// Personμ΄ Objectμμ λ¬Όλ €λ°μ hashCode()λ₯Ό Studentκ° λ λ¬Όλ €λ°μ μ¬μ©
String str = "abc";
Scanner sc = new Scanner(System.in);
System.out.println(str.hashCode());
// Stringμ΄ Object μμλ°μ
System.out.println(sc.hashCode());
// Scannerκ° Object μμλ°μ
}
public void ex5() { // toString μ¬μ© μμ
Person p = new Person("κΉμ² μ", 17, "νκ΅");
System.out.println(p.toString());
System.out.println(p);
// print ꡬ문 μν μ μ°Έμ‘°λ³μλͺ
μ μμ±νλ©΄
// μλμΌλ‘ toString() λ©μλλ₯Ό νΈμΆν΄μ μΆλ ₯νλ€
Student std = new Student("μ΄λ°±μ ", 18, "λ―Έκ΅", 2, 6);
System.out.println(std.toString());
System.out.println(std);
Employee emp = new Employee("μ΅μ§μ", 30, "νκ΅", "khμ 보κ΅μ±μ");
System.out.println(emp);
}
}
: κ°μ²΄ μ§ν₯ μΈμ΄μ νΉμ§ μ€ νλλ‘ βλ€μν ννλ₯Ό κ°λλ€βλΌλ λ»μΌλ‘ νλμ νλμΌλ‘ μ¬λ¬ κ°μ§ μΌμ μννλ κ°λ
.
: μμμ μ΄μ©ν κΈ°μ λ‘ λΆλͺ¨ ν΄λμ€ νμ
μ°Έμ‘°λ³μ νλλ‘ μμ κ΄κ³μ μλ μ¬λ¬ νμ
μ μμ κ°μ²΄λ₯Ό μ°Έμ‘°ν μ μλ κΈ°μ
: μμ κ΄κ³μ μλ λΆλͺ¨, μμ ν΄λμ€ κ°μ
λΆλͺ¨νμ
μ μ°Έμ‘°ν λ³μκ° λͺ¨λ μμ νμ
κ°μ²΄μ μ£Όμλ₯Ό μ°Έμ‘°ν μ μμ
: μμ -> λΆλͺ¨λ‘ μΊμ€ν
: λΆλͺ¨νμ
μ°Έμ‘°λ³μκ° μμ κ°μ²΄λ₯Ό μ°Έμ‘°νλ κΈ°μ λ‘ μ
μΊμ€ν
μνμμλ§ μ§νν μ μλ€.
: λΆλͺ¨νμ
μ μμνμ
μΌλ‘ "κ°μ νλ³ν"ν΄μ μμ κ°μ²΄μ λ³Έλ νλ, λ©μλλ₯Ό μ¬μ© κ°λ₯νκ² νλ€.
: μ£Όμν μ -> μ°μ°μκ° νλ³ν μ°μ°μλ³΄λ€ μ°μ μμκ° λμ -> ()λ‘ ν λ² λ μ²λ¦¬ν΄μ€μΌν¨
System.out.println(((Tesla)c1).getBatteryCapacity());
: λ€μ΄ μΊμ€ν
μ νλ³ν μμΈ(μμ <=> μμ κ°)κ° λ°μν μ μλ λ¬Έμ κ° μμ. -> istanceofλ₯Ό μ¬μ©ν΄ νλ³ν(λ€μ΄μΊμ€ν
)μ΄ κ°λ₯νμ§ νμΈν΄μΌνλ€!
: κ°μ²΄μ μλ£νμ κ²μ¬νλ μ°μ°μ -> μ°Έμ‘°νλ κ°μ²΄κ° νΉμ μλ£νμ΄κ±°λ λΆλͺ¨ μͺ½ μμκ΄κ³μΈμ§ νμΈ
: νμ¬ μ°Έμ‘°νλ³μκ° μ΄λ€ ν΄λμ€ νμ κ°μ²΄μ£Όμλ₯Ό μ°Έμ‘°νκ³ μλμ§ νμΈν λ μ¬μ©
: ν΄λμ€ νμ
μ΄ λ§μΌλ©΄ true, λ§μ§ μμΌλ©΄ false λ°ν
: μ€μ μ€νν λ©μλ μ½λμ νΈμΆνλ μ½λλ₯Ό μ°κ²° μν€λ κ²
1. μ μ λ°μΈλ©
: "νλ‘κ·Έλ¨μ΄ μ€νλκΈ° μ " μ»΄νμΌ λ¨κ³μμ λ©μλμ λ©μλ νΈμΆλΆλ₯Ό μ°κ²°
2. λμ λ°μΈλ©
: "μ»΄νμΌ μ" μ μ λ°μΈλ©λ λ©μλλ₯Ό μ€νν λΉμμ κ°μ²΄ νμ
μ κΈ°μ€μΌλ‘ λ°μΈλ© λλ κ²
β Car ν΄λμ€ (λΆλͺ¨)
package edu.kh.poly.ex1.mode.vo;
public class Car {
private String engine; // μμ§
private String fuel; // μ°λ£
private int wheel; // ν κ°μ
public Car() {}
// 맀κ°λ³μ μμ±μ λ¨μΆν€ : alt + shift + s -> o -> enter
public Car(String engine, String fuel, int wheel) {
super(); // Object μμ
this.engine = engine;
this.fuel = fuel;
this.wheel = wheel;
}
public String getEngine() {
return engine;
}
public void setEngine(String engine) {
this.engine = engine;
}
public String getFuel() {
return fuel;
}
public void setFuel(String fuel) {
this.fuel = fuel;
}
public int getWheel() {
return wheel;
}
public void setWheel(int wheel) {
this.wheel = wheel;
}
// Object.toString() μ€λ²λΌμ΄λ©
@Override // μ€λ²λΌμ΄λ© νλ€λκ±Έ μλ €μ£Όλ Override Annotation
public String toString() {
return engine + "/" + fuel + "/" + wheel;
}
}
β Telsa ν΄λμ€ (μμ)
package edu.kh.poly.ex1.mode.vo;
public class Tesla extends Car{ // μ κΈ°μ°¨
private int batteryCapacity;// λ°°ν°λ¦¬μ©λ
public Tesla() {}
// alt + shift + s -> o -> μλλ°©ν₯ν€ -> enter
// 맀κ°λ³μ μμ±μ + μμλ°μ κ²λ ν¬ν¨
public Tesla(String engine, String fuel, int wheel, int batteryCapacity) {
super(engine, fuel, wheel);
this.batteryCapacity = batteryCapacity;
}
public int getBatteryCapacity() {
return batteryCapacity;
}
public void setBatteryCapacity(int batteryCapacity) {
this.batteryCapacity = batteryCapacity;
}
@Override // Car.toStringμ μ€λ²λΌμ΄λ©ν κ²
public String toString() {
return super.toString() + batteryCapacity;
}
}
β Spark ν΄λμ€ (μμ)
package edu.kh.poly.ex1.mode.vo;
public class Spark extends Car{ // κ²½μ°¨
private double discountOffer; // ν μΈνν
public Spark() {}
public Spark(String engine, String fuel, int wheel, double discountOffer) {
super(engine, fuel, wheel);
this.discountOffer = discountOffer;
}
public double getDiscountOffer() {
return discountOffer;
}
public void setDiscountOffer(double discountOffer) {
this.discountOffer = discountOffer;
}
@Override
public String toString() {
return super.toString() + discountOffer;
}
}
β PolyService ν΄λμ€ (μ€νν΄λμ€)
package edu.kh.poly.ex1.model.service;
import java.nio.file.spi.FileSystemProvider;
import edu.kh.poly.ex1.mode.vo.Car;
import edu.kh.poly.ex1.mode.vo.Spark;
import edu.kh.poly.ex1.mode.vo.Tesla;
public class PolyService {
public void ex1() { // λ€νμ± νμΈ μμ
// Car κ°μ²΄ μμ±
Car car = new Car();
// λΆλͺ¨ νμ
μ°Έμ‘°λ³μ = λΆλͺ¨ κ°μ²΄
// Tesla κ°μ²΄ μμ±
Tesla tesla = new Tesla();
// μμνμ
μ°Έμ‘°λ³μ = μμ κ°μ²΄
// *******************λ€νμ±*********************
Car car2 = new Tesla();
// λΆλͺ¨νμ
μ°Έμ‘°λ³μ = μμ κ°μ²΄
// Tesla κ°μ²΄λ₯Ό μ°Έμ‘°νλ λ³μμ νμ
μ΄ Car(λΆλͺ¨)μ΄κΈ° λλ¬Έμ
// Tesla κ°μ²΄κ° Car(λΆλͺ¨)κ°μ²΄λ‘ λ³νν¨
Spark spark = new Spark();
Car car3 = new Spark();
// λΆλͺ¨νμ
μ°Έμ‘°λ³μ = μμ κ°μ²΄
// ****λ€νμ±(μ
μΌμ€ν
)μμ± λ°©λ²*****
// 1) μμκ°μ²΄κ° λΆλͺ¨κ°μ²΄λ‘ λ³νμκΈ° λλ¬Έμ
// μμλ§μ κ³ μ ν νλ, λ©μλλ₯Ό μ¬μ©ν μ μλ€.
// 1-1) car(λΆλͺ¨ = λΆλͺ¨)
car.setEngine("v6 6κΈ°ν΅ μμ§");
car.setFuel("νλ°μ ");
car.setWheel(4);
// Car λ©μλ λͺ¨λ μ¬μ© κ°λ₯
// 1-2) tesla (μμ = μμ)
tesla.setEngine("μ κΈ°λͺ¨ν°");
tesla.setFuel("μ κΈ°");
tesla.setWheel(4);
tesla.setBatteryCapacity(1000000);
// Tesla λ©μλ λͺ¨λ μ¬μ© κ°λ₯
// 1-3) car2 (λΆλͺ¨ = μμ(Tesla))
car2.setEngine("μ κΈ°λͺ¨ν°");
car2.setFuel("μ κΈ°");
car2.setWheel(4);
//car2.setBatteryCapacity(1000000);
// Tesla λ³Έμ°μ λ©μλ μ¬μ© λΆκ°
//The method setBatteryCapacity(int) is undefined for the type Car
car3.setEngine("κ²½μ°¨ μμ§");
car3.setFuel("νλ°μ ");
car3.setWheel(4);
//car3.discountOffer(4);
// Spark λ³Έμ°μ λ©μλ μ¬μ© λΆκ°
//**************************************
// 2) λ€νμ±μ μ΄μ©ν κ°μ²΄ λ°°μ΄
// κ°μ²΄ λ°°μ΄ : κ°μ κ°μ²΄ μ°Έμ‘° μλ£νμ λ³μλ₯Ό νλμ λ¬ΆμμΌλ‘ λ€λ£¨λ κ²
// λΆλͺ¨νμ
μ°Έμ‘° μλ£νμ λ³μλ₯Ό νλμ λ¬ΆμμΌλ‘ λ€λ£¨λ κ²
Car[] arr = new Car[3]; // λΆλͺ¨νμ
μ°Έμ‘°λ³μ λ°°μ΄ μ μΈ λ° ν λΉ
// κ° λ°°μ΄μ μμκ° Car νμ
arr[0] = car; // Car μ£Όμ
arr[1] = car2; // Tesla μ£Όμ
arr[2] = car3; // Spark μ£Όμ
for(int i = 0; i < arr.length; i++) {
System.out.println(i + "λ²μ§Έ μΈλ±μ€μ " + arr[i].getEngine());
System.out.println(i + "λ²μ§Έ μΈλ±μ€μ " + arr[i].getFuel());
}
// μμ + λ€νμ±μ΄ λμ΄μλ μνλ‘
// μμνΉμ§ : Car μμν΄λμ€λ λͺ¨λ getEngine()μ κ°μ§κ³ μλ€λ₯Ό μ μ
// λ€νμ±(μ
μΊμ€ν
) : λΆλͺ¨νμ
μ°Έμ‘°λ³μ arr[i]λ‘ μμ κ°μ²΄λ₯Ό μ°Έμ‘°ν μ μλ€.
}
public void ex2() { // 3) λ€νμ±(μ
μΊμ€ν
)μ μ΄μ©ν 맀κ°λ³μ μ¬μ©λ²
Tesla t = new Tesla("μ κΈ°λͺ¨ν°", "μ κΈ°", 4, 1000000);
Spark s = new Spark("κ²½μ°¨μμ§", "νλ°μ ", 4, 0.5);
Car c = new Car("κ²½μ μμ§", "κ²½μ ", 4);
printCar(t);
printCar(s);
printCar(c);
System.out.println("================================");
// 4) λ€νμ±μ μ΄μ©ν λ³νν μ¬μ©λ²
//Car[] arr = {new Car(), new Tesla(), new Spark()};
Car[] arr = {createCar(1), createCar(2), createCar(3)};
// Car // Car // Car
// (Tesla) // (Spark)
// instanceof μ°μ°μ : κ°μ²΄μ μλ£νμ κ²μ¬νλ μ°μ°μ
// -> μ°Έμ‘°νλ κ°μ²΄κ° νΉμ μλ£νμ΄κ±°λ λΆλͺ¨μͺ½ μμκ΄κ³μΈμ§ νμΈ
System.out.println( arr[1] instanceof Tesla ); // true
System.out.println( arr[1] instanceof Spark ); // false
System.out.println( arr[1] instanceof Car ); // true
}
// μ λ¬λ°μ Car λλ μμ κ°μ²΄μ μμ§, μ°λ£, λ°ν΄ κ°μλ₯Ό μΆλ ₯νλ λ©μλ
// 맀κ°λ³μμ λΆλͺ¨νμ
μ°Έμ‘°λ³μλ₯Ό μμ±νλ©΄ λͺ¨λ μμ κ°μ²΄λ₯Ό μ λ¬λ°μ μ μλ€.
// λΆλͺ¨νμ
μ°Έμ‘°λ³μ = μμνμ
κ°μ²΄
// λ€νμ±μ μ
μΊμ€ν
λͺ¨μκ³Ό κ°λ€.
// tempμλ Tesla, Spark, Carμ μ£Όμκ° λμ΄μλ λλ€(μ
μΊμ€ν
)
public void printCar(Car temp){
System.out.println("μμ§ : " + temp.getEngine());
System.out.println("μ°λ£ : " + temp.getFuel());
System.out.println("λ°ν΄ κ°―μ : " + temp.getWheel());
System.out.println();
}
public Car createCar(int num) {
Car result = null;
switch(num) {
case 1 : result = new Car(); break;
case 2 : result = new Tesla(); break;
case 3 : result = new Spark(); break;
}
return result;
}
public void ex3() {
// ********** λ€νμ± μ€ λ€μ΄μΊμ€ν
***************
// λ€μ΄ μΊμ€ν
μ΄λ?
// λΆλͺ¨νμ
μ°Έμ‘°λ³μκ° μμ κ°μ²΄λ₯Ό μ°Έμ‘°νλ κΈ°μ λ‘
// μ
μΊμ€ν
μνμμλ§ μ§νν μ μλ€.
// λΆλͺ¨νμ
μ μμνμ
μΌλ‘ "κ°μ νλ³ν"ν΄μ
// μμ κ°μ²΄μ λ³Έλ νλ, λ©μλλ₯Ό μ¬μ© κ°λ₯νκ² νλ€.
Car c1 = new Tesla("μ κΈ°λͺ¨ν°", "μ κΈ°", 4, 50000000);
System.out.println(((Tesla)c1).getBatteryCapacity());
// μ£Όμ!! . μ°μ°μκ° νλ³ν μ°μ°μλ³΄λ€ μ°μ μμκ° λμ -> ()λ‘ ν λ² λ μ²λ¦¬ν΄μ€μΌν¨
Tesla t1 = (Tesla)c1; // λ€μ΄μΊμ€ν
ν μμ볡μ¬
System.out.println(t1.getBatteryCapacity());
}
public void ex4() {
// λ€μ΄ μΊμ€ν
μ£Όμ μ¬ν!
Car c1 = new Tesla();
// Spark s1 = (Spark)c1;
// c1μ΄ μ°Έμ‘°νλ κ°μ²΄λ TeslaμΈλ°
// Spark μ°Έμ‘°λ³μλ‘ Teslaλ₯Ό μ°Έμ‘°νλ €κ³ νλ©΄ λ¬Έμ κ° μμ.
// java.lang.ClassCastException: : νλ³ν μμΈ
// ν΄κ²°λ°©λ² : istanceofμ κ°μ΄ μ¬μ©ν΄μΌνλ€!
if(c1 instanceof Spark) {
Spark s1 = (Spark)c1; // λ€μ΄μΊμ€ν
System.out.println("μ±κ³΅");
}
System.out.println("μ€ν¨ (Spark νμ
μ΄ μλ)");
}
public void ex5() {
// λ°μΈλ© : μ€μ μ€νν λ©μλ μ½λμ νΈμΆνλ μ½λλ₯Ό μ°κ²°μν€λ κ²
Car c1 = new Car("κ²½μ μμ§", "κ²½μ ", 8);
System.out.println(c1.getEngine());
// Car κ°μ²΄μ μλ getEngine() λ©μλλ₯Ό νΈμΆ == λ°μΈλ©
// νλ‘κ·Έλ¨ μ€ν μ
// μ»΄νμΌλ¬λ getEngine() λ©μλκ° Carμ μλκ±Έλ‘ μΈμν΄μ
// c1.getEngine()νΈμΆμ½λμ
// edu.kh.poly.ex1.mode.vo.Car.getEngine() λ©μλ μ½λλ₯Ό μ°κ²°
// -> μ μ λ°μΈλ©
System.out.println(c1.toString());
// String edu.kh.poly.ex1.mode.vo.Car.toString()
// Car μ°Έμ‘°λ³μ c1μ μ΄μ©ν΄μ
// Car κ°μ²΄μμλ μ€λ²λΌμ΄λ©λ toString() λ©μλλ₯Ό νΈμΆ
// *** λ€νμ± μ μ© μ λ°μΈλ©***
Car c2 = new Spark("κ²½μ°¨μμ§", "νλ°μ ", 4, 0.5);
// μ
μΊμ€ν
μ μ© -> λΆλͺ¨ λΆλΆλ§ μ°Έμ‘° κ°λ₯ν μν
System.out.println(c2.toString());
// String edu.kh.poly.ex1.mode.vo.Car.toString()
// μ°Έμ‘°λ³μ c2κ° Carνμ
μ΄λ―λ‘
// toString()λ Carμ toString()μ νΈμΆ - μ μ λ°μΈλ©
// νμ§λ§ μ€νν΄λ³΄λ©΄ μμSparkμ toStringμ΄ νΈμΆλλ κ²μ νμΈν μ μλ€.
// -> μ»΄νμΌ μμλ λΆλͺ¨(Car)μ λ°μΈλ©
// -> μ€ν μμλ μμ(Spark)μ μ€λ²λΌμ΄λ©λ λ©μλμ λ°μΈλ© == λμ λ°μΈλ©
}
}
β PolyRun ν΄λμ€
package edu.kh.poly.ex1.run;
import edu.kh.poly.ex1.model.service.PolyService;
public class PolyRun {
public static void main(String[] args) {
PolyService service = new PolyService();
service.ex1();
service.ex2();
service.ex3();
service.ex4();
service.ex5();
}
}