μμ(Inheritance)
μμ ν΄λμ€κ° λΆλͺ¨ ν΄λμ€μ κΈ°λ₯μ κ·Έλλ‘ λ¬Όλ €λ°μ μ μλ κΈ°λ₯
μλ μ½λμ²λΌ μμμ μ΄μ©νκΈ° μν΄μλ extends ν€μλλ₯Ό μ¬μ©
μμμ μ₯μ
- κΈ°μ‘΄μ μμ±λ ν΄λμ€ μ¬νμ©
- μ€λ³΅ μ½λ μμ± μν΄λ λ¨
- ν΄λμ€ κ°μ κ³μΈ΅μ κ΄κ³λ₯Ό ꡬμ±ν¨μΌλ‘μ¨ λ€νμ± ν λκ° λ¨
μλ°μ μμ λ°©μ
- λ€λ¨κ³ μμ λ° κ³μΈ΅μ μμμ μ§μ, λ€μ€ μμμ μ§μX
- νμ§λ§, interfaceλ₯Ό ν΅ν΄μ λ€μ€ μμκ³Ό μ μ¬ν ννμ μμ κΈ°λ₯ μ 곡
package μμκΈ°λ³Έ0113;
public class BasicInheritance {
public static void main(String[] args) {
HouseDog houseDog = new HouseDog();
houseDog.setName("λ°±νΈ");
houseDog.sleep();
houseDog.sleep(4);
}
}
package μμκΈ°λ³Έ0113;
public class Animal {
String name;
void setName(String name) {
this.name = name;
}
}
class Dog extends Animal {
void sleep() {
System.out.println(name + "μ(λ) μ μ μ‘λλ€.");
}
}
class HouseDog extends Dog {
@Override // (μ΄λ
Έν
μ΄μ
) μ€λ²λΌμ΄λ νλ€λ κ±Έ κ΄λ‘μ μΌλ‘ μλ €μ£Όλ κ²
void sleep() {
System.out.println(name + "μ(λ) μ§μμ μ μ μ‘λλ€.");
}
// μ€λ²λ‘λ© κ΄κ³κ° μ±λ¦½ν¨
void sleep(int time) {
System.out.println(name + "κ°(μ΄) " + time + "μκ° λμ μ§μμ μ μ μ‘λλ€.");
}
}
- @Override : νμ€ μ΄λ
Έν
μ΄μ
μ€ νλλ‘, μ¬μ μ μλ―Έλ‘λ μ£Όμμ΄λΌλ λ»μ κ°μ§κ³ μλ€.
κΌ μ¨μΌ νλ κ²μ μλκ³ , κ΄λ‘μ μΌλ‘ Override νλ¨ κ²μ μλ €μ£Όλ μ©λ - μμ ν΄λμ€μμ μλ¬΄λ° κΈ°λ₯ ꡬννμ§ μμλ μλμΌλ‘ λΆλͺ¨μ νλμ λ©μλκ° ν¬ν¨λ¨.
final ν΄λμ€μ final λ©μλ
final ν€μλλ ν΄λμ€, νλ, λ©μλ μ μΈμ μ¬μ© κ°λ₯.
final ν€μλλ ν΄λΉ μ μΈμ΄ μ΅μ’ μνμ΄κ³ μμ λΆκ°ν¨μ λνλ.
package μ€λ²λΌμ΄λ©μ μ½0113;
public class FinalOverriding {
public static void main(String[] args) {
SportsCar sportsCar = new SportsCar("λ보λ₯΄κΈ°λ");
sportsCar.setTurbo(true);
sportsCar.infoCar();
sportsCar.accelerator();
sportsCar.breakPanel();
ElectricCar electricCar = new ElectricCar("ν
μ¬λΌ");
electricCar.setAutoDrv(true);
electricCar.infoCar();
}
}
package μ€λ²λΌμ΄λ©μ μ½0113;
public class Vehicle {
protected int speed;
protected String color;
protected String name;
final void accelerator() {
System.out.println("μ°¨μ μλλ₯Ό μ¦κ° μν΅λλ€.");
}
final void breakPanel() {
System.out.println("μ°¨μ μλλ₯Ό κ°μ μν΅λλ€.");
}
}
class SportsCar extends Vehicle {
private boolean isTurbo;
SportsCar(String name) {
isTurbo = false;
speed = 280;
this.name = name;
color = "Red";
}
int getSpeed() {
if(isTurbo) return speed *= 1.2;
return speed;
}
boolean getTurbo() {
return isTurbo;
}
void setTurbo(boolean turbo) {
isTurbo = turbo;
}
void infoCar() {
System.out.println("μ΄λ¦ : " + name);
System.out.println("μλ : " + getSpeed());
System.out.println("μμ : " + color);
System.out.println("ν°λ³΄ λͺ¨λ : " + isTurbo);
}
}
class ElectricCar extends Vehicle {
boolean isAutoDrv;
ElectricCar(String name) {
isAutoDrv = false;
speed = 200;
this.name = name;
color = "White";
}
boolean getAutoDrv() {
return isAutoDrv;
}
void setAutoDrv(boolean autoDrv) {
isAutoDrv = autoDrv;
}
void infoCar() {
System.out.println("μ΄λ¦ : " + name);
System.out.println("μλ : " + speed);
System.out.println("μμ : " + color);
System.out.println("μμ¨μ£Όν : " + isAutoDrv);
}
}
- μ€λ²λΌμ΄λ©μ λΆλͺ¨κ° κ°μ§ λ©μλλ₯Ό μ¬μ μν΄μ μ¬μ©νλ κ²
- λΆλͺ¨μ ν΄λμ€κ° μ€μ²΄κ° μλ ν΄λμ€μ΄λ©΄ μ€λ²λΌμ΄λ©μ μ ν μ¬νμ
- λΆλͺ¨μ ν΄λμ€μμ λ©μλ ꡬνμ μμ λ°μ μμμ΄ μ€λ²λ‘λ© ν μ μλλ‘ κΈμ§ν μ μμ(final)
- protected : μμκ΄κ³μ λμΌ ν¨ν€μ§ λ΄μμ μ κ·Ό κ°λ₯, main / μΈλΆμμλ μ κ·Ό λΆκ°
- getterλ λ³΄ν΅ κ°μ μ½λ κΈ°λ₯μ λ£κΈ° λλ¬Έμ λ°ννμ μ΄ μμ.
- setterλ μΈλΆμμ λ΄λΆμ μλ νλ κ°μ λ°κΎΈκΈ° μν κΈ°λ₯μΌλ‘ μ£Όλ‘ μ°μΈλ€.
static final
λ΄μ©μ΄ λ μ΄μ λ³κ²½λμ§ μκ³ κ°μ²΄ μμ±μ΄ λμ§ μλλ‘ λ§λ€κΈ°
public class Common {
final static String[] screenType = {"", "11μΈμΉ", "12.9μΈμΉ"};
final static String[] colorType = {"", "μ€νμ΄μ€κ·Έλ μ΄", "μ€λ²"};
final static String[] memType = {"", "128BG", "256GB", "512GB", "1TB"};
final static String[] netType = {"", "Wi-Fi", "Wi-Fi+Cellular"};
}
λ€μ€ μμ
λ€μ€ μμμ μ§μνμ§ μμΌλ―λ‘ μλμ μ½λλ μν μ λ¨
class A {
public void msg() {
System.out.println("A message");
}
}
class B {
public void msg() {
System.out.println("B message");
}
}
class C extends A, B {
public void static main(String[] args) {
C test = new C();
test.msg();
}
}
κ°μ²΄ νμ νμΈ(instance)
instanceof : κ°μ²΄ νμ νμΈ μ°μ°μ, λΆλͺ¨μ μμ κ΄κ³ μ±λ¦½ μ¬λΆ "νμΈ"νλ μ©λ
package κ°μ²΄νμ
νμΈ0113;
public class InstanceOf {
public static void main(String[] args) {
Parent parent = new Parent("λΆλͺ¨λ");
Child child = new Child("μμ");
System.out.println(parent instanceof Parent); // true
System.out.println(child instanceof Parent); // true
System.out.println(parent instanceof Child); // false
System.out.println(child instanceof Child); // true
}
}
class Parent {
String name;
public Parent(String name) {
this.name = name;
}
}
class Child extends Parent {
public Child(String name) {
super(name);
this.name = name;
}
}