public class Truck {
Engine e; // Truck has a Engine이라고 표현할 수 있다
}
public class Engine {
}
// Engineer is a Employee
Class Employee { // 큰 개념 (부모 클래스, super class, parent class)
}
Class Engineer extends Employee { // 작은 개념 (자식 클래스, sub class, child class)
}
부모 : 접근지정자 리턴타입 메서드명(변수,...){ }
@Override => 어노테이션 (annotation)이 있으면 재정의한 메서드구나 !
자식 : X 리턴타입 메서드명(변수,...) Y { }
X => 자식의 접근지정자는 부모에서 지정된 접근 지정 레벨 혹은 덜 제한하는, 더 오픈된 레벨이 가능하다
public > protected > default > private (부모가 public이면 자식은 public만 가능)
Y => 부모에서 지정된 예외클래스와 같거나 자식 예외클래스(아래)만 지정할 수 있다
Object
Exception
RuntimeException
ArrayIndexOutofBoundsException, NullPointerException
super
this
cf) 객체 지향의 3대 특징
Object
|
Employee
| |
Engineer Manager
Employee emp = new Employee();
Enginner eng = new Engineer();
Manager m = new Manager();
Employee emp = new Employee();
emp = new Engineer();
emp = new Manager();
// Employee 배열 => Employee 또는 그 자식들 저장할 수 있다
Employee[] emp = { new Employee(), new Engineer(), new Manager() };
// 다형성 확장해서 Object 배열을 만들면 모든 데이터 저장 가능
Object[] obj = {"hello", new Employee(), Random(), 10, 3.14};
public void a(Object x) { } // 모든 형태의 값 전달 가능
a("hello");
a(10);
a(true);
예> public String printf(String s, Object ... obj)