Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

기록 저장소

[Java #13] inheritance 본문

kitri 노트/java

[Java #13] inheritance

resault 2019. 3. 25. 23:14



[ 상속 (inheritance) ]

1. 기본개념

형식)
접근제어자 class ClassName extends ClassName {

}
>> 앞의 것 : 하위class, 뒤의 것: 상위class


▷ 상위class의 filed와 method를 하위class에서 사용 (객체생성 없이)
  단, private field와 private method 및 생성자는 상속 불가!! (객체 생성시 상위class의 생성자가 자동으로 호출됨)

 extends keyword 사용

 class간의 상속은 단일 상속만 가능 (다중상속 불가)    → 상위class는 하나만 쓸 수 있다는 의미

 계층적 상속은 가능

 모든 클래스의 최상위 클래스는 Object class임 (default!)

 method overriding(method의 재정의) : 하위class의 기능에 맞게 재정의
    method의 선언은 그대로 유지 : 인자값, 개수 등은 유지 (외형은 바꾸면 안되고, 그 안의 기능만 재정의 한다는 의미)
    단, 접근제어자는 넓은 의미로 변경 가능 (ex. default를 public으로 변경 가능)
        but private는 상속이 불가하므로 private → default는 불가

▷ super. / super()
    - this
    - super : 상위클래스 참조변수
    - this()
    - super() : 상위클래스의 생성자 호출
        >> 상속관계에 있을 경우, 생성자를 생성하면 default로 super();가 있음

▷ 다형성 : 하위class를 참조하여 상위class의 객체를 생성    (추상클래스에서는 A a = new A();가 안됨! 다형성으로 객체 생성해야함)
   A.class(상위)  B.class(하위)
   A a = new A();
   B b = new B();
   A a = new B();

▷ class의 관계
    - has a : 집합    (비행기는 자동차이다 X → 객체 생성하여 가져다 쓸 수는 있음)
    - is a  : 상속    (택시는 자동차이다 → 택시는 자동차를 상속할 수 있음)


상위    자동차 - 차이름, 색상, 제조사, 속도
        (Car)   가속(), 감속(), 정지()

하위     택시(Taxi) 150        버스(Bus) 110            트럭(Truck) 100
        요금(price)          승객수(pcount)          중량(weight), 총중량(maxWeight)
        요금계산()            타다()                 상차()
        calcPrice(int km)    getOn(int pcount)      loadUp(int weight)
                             내리다()                하차()
                             getOut(int pcount)     loadDown(int weight)

- 생성자가 호출되는 순간, 객체가 메모리에 올라가며, 객체가 메모리에 올라가야 해당 객체의 필드와 메소드를 사용할 수 있게됨


2. 상세내용 & 예제


▷ method의 overriding
@Override
@ : annotation. 의미를 부여하는 주석. 하위클래스에서 method이름 다르게 쓰면 에러 발생함
    (cf. //등은 컴파일시에 제외하라는 의미)

@Override
public int speedUp(int speed) {
    this.speed += speed;
    if(this.speed > 150)
        this.speed = 150;
    return this.speed;
}
// ↓↓
@Override
public int speedUp(int speed) {
    super.speedUp(speed); //중복되는 부분을 호출로 해결함!
    if(this.speed > 150)
        this.speed = 150;
    return this.speed;
}

▷ toString()
- object를 string으로 변환해주는 object 클래스의 
System.out.println(t1.toString() + "       " + t2.toString()); //object는 모든 클래스의 상위클래스이므로, 하위클래스 객체명.toString으로 호출가능
System.out.println(t1 + "       " + t2);//toString() 생략하더라도, 객체를 문자열과 더하면 자동 호출하면 안됨

- toString의 overriding
@Override
public String toString() { //object class의 method를 override
    return maker +"에서 만든 " + color + " " + carName ;
}

▷ hashcode()
- 객체의 주소값을 반환해주는 object 클래스의 method
System.out.println(t2.hashCode() + "       " + t3.hashCode());

▷ equals()
- 객체의 주소값을 비교
if(t2.equals(t3))
    System.out.println("t2와 t3는 차이름이 같은차이다.");
else
    System.out.println("t2와 t3는 차이름이 다른차이다.");

-equals의 overriding
@Override
public boolean equals(Object obj) {
    Car car = (Car) obj;
    //if(carName == car.carName)//""일 경우는 true, new String("")일 경우는 false.
    if(carName.equals(car.carName))
        return true;
    return false;
}










'kitri 노트 > java' 카테고리의 다른 글

[Java #15] interface  (0) 2019.03.25
[Java #14] abstract  (0) 2019.03.25
[Java #12] method  (0) 2019.03.22
[Java #11] field, constructor  (0) 2019.03.21
[Java #10] Class  (0) 2019.03.21