기존 클래스에 기능을 추가 및 재정의해 새로운 클래스를 정의하는 행위를 상속이라고 한다.
이 때 기존 클래스를 부모 클래스, 새로 정의된 클래스를 자식 클래스 라고 한다.
class 부모클래스명 {
...
}
class 자식클래스명 extends 부모클래스명 {
...
}
this
와 비슷한 역할을 한다.
super
super()
부모 클래스의 메서드를 자식 클래스에서 재정의하는 행위를 말한다.
기존에 배운 Overloading 과는 다르다.
package test;
class Person {
String name;
int age;
public int pubInt;
private int privInt;
Person(){}
Person(String name, int age) {
this.name = name;
this.age = age;
}
public void printInfo() {
System.out.println("name : " + name);
System.out.println("age : " + age);
System.out.println("pubInt : " + pubInt);
System.out.println("privInt : " + privInt);
}
}
/* 접근 제어자 Test */
class Student1 extends Person {
Student1(){
pubInt = 1;
// privInt = 1; // error
}
}
/* super 와 Overriding */
class Student2 extends Person {
String name;
int stdId;
Student2(String name, int age, int stdId){
/* super */
super(name, age);
// super.name = name; // 부모와 함께
// this.age = age; // 부모와 함께
this.name = name; // 자식만
this.stdId = stdId; // 자식만
}
/* Overriding */
public void printInfo() {
System.out.println("name : " + name);
System.out.println("age : " + age);
System.out.println("stdId : " + stdId);
}
}
public class Main {
public static void main(String[] args) {
/* 접근제어자 출력 */
Student1 s1 = new Student1();
System.out.println("=====접근제어자 출력=====");
s1.printInfo(); // =====접근제어자 출력=====
// name : null
// age : 0
// pubInt : 1
// privInt : 0
s1.name = "a";
s1.age = 25;
System.out.println("=====접근제어자 출력=====");
s1.printInfo(); // =====접근제어자 출력=====
// name : a
// age : 25
// pubInt : 1
// privInt : 0
/* super, super(), Overriding */
System.out.println("=====super super() 출력=====");
Student2 s2 = new Student2("b", 26, 1);
s2.printInfo(); // =====super super() 출력=====
// name : b
// age : 26
// stdId : 1
}
}