상속이란?
- 기존의 클래스를 재활용해서 새로운 클래스를 작성하는 것.
- 상속을 통해 연관된 일련의 클래스에 대한 공통적인 규약을 정의하고 적용하는데, 상속의 실질적인 목적이 있다.
오버라이딩이란?
- 상위 클래스에 정의된 메소드의 이름, 반환형, 매개변수 선언까지 완전히 동일한 메소드를 하위 클 래스에서 다시 정의하는 것!
- 즉, 상위 클래스로부터 상속받은 메서드의 내용을 상속받는 클래스에 맞게 변경하는 것이다.
- 하위 클래스에 정의된 메소드에 의해 상위 클래스의 메소드는 가리워진다.
예제 1.
//부모(조상,super) 클래스: 원본이 되는 클래스
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name=name;
this.age=age;
}
public Person() {}
public void sleep() {
System.out.println("사람은 보통 8시간 잔다.");
}
public void eat() {
System.out.println("사람은 음식을 먹는다.");
}
public void showInfo() {
System.out.println("name:"+name);
System.out.println("age:"+age);
}
}
//자식(후손,sub,파생) 클래스 : 상속을 하는 클래스
public class Student extends Person{
//String name
//int age
//sleep()
private int sNo;
private int kor;
public Student() {}
//상속<정보은닉 :상속보다 private가 우선되어서 자식 클래스에선 부모 클래스의 private 선언한 변수에 접근 할 수 없다.
public Student(String name, int age, int sNo, int kor) {
super(name,age); //Person();이 숨어있다. 자식 클래스의 생성자 첫줄에는 super()가 숨어있다.
this.sNo=sNo;
this.kor=kor;
}
public void sleep() {//오버라이딩
System.out.println("학생은 6시간 잔다.");
}
public void study() {
System.out.println("학생은 공부를 한다.");
}
public void showInfo() {//메소드 오버라이딩(재정의)
super.showInfo(); //name,age //부모 클래스의 showInfo()를 실행한다.
System.out.println("sNo:"+sNo);
System.out.println("kor:"+kor);
}
}