public class Person {
	protected int num;
	protected String name;
	protected String dept;
	protected String address;
		
	public Person(int num, String name, String dept, String address) {
		this.num = num;
		this.name = name;
		this.dept = dept;
		this.address = address;
	}
}
public class Professor extends Person{
	
	public Professor(int num, String name, String dept, String address, String[] subjects) {
		super(num, name, dept, address);
		this.subjects = subjects;
	}
}
Professor pf = new Professor(11, "김길동", "경제학과", "인천시", new String[] {"자바", "경제", "사회"});

Person을 상속받은 Professor의 생성자 첫 줄에서 super를 통해 부모 생성자를 명시적으로 호출해서

겹치는 부분을 코드 재사용했다.

public class Car {
    //Car 클래스에는 다음과 같은 3개의 메소드가 들어있다.
    public void carOn() {
        System.out.println("시동을 겁니다.");
    }
    public void drive() {//오버라이딩 될 메소드
        System.out.println("일반 주행 중입니다.");
    }
    public void carOff() {
        System.out.println("시동을 끕니다.");
    }
}
public class SmartCar extends Car{
    public static final int NORMAL = 1;
    public static final int SMART = 2;

    public int driveMode = NORMAL;//driveMode는 기본적으로 NORMAL임

    @Override // 밑의 메소드가 오버라이딩된것이라는 것을 알려주는 어노테이션
    public void drive() {
        if(driveMode == NORMAL) {//driveMode가 NORMAL일 경우 부모 클래스인 Car 클래스의 drive 메소드를 사용.
            super.drive();
        }
        else {
            System.out.println("자동 주행 중입니다.");
        }
    }
}
public class Main {
    public static void main(String[] args) {
        SmartCar smartCar = new SmartCar(); //객체 생성
        smartCar.carOn();
        smartCar.drive();
        smartCar.driveMode = SmartCar.SMART; //driveMode를 SMART로 바꿈
        smartCar.drive();
        smartCar.carOff();
    }
}
시동을 겁니다.
일반 주행 중입니다.
자동 주행 중입니다.
시동을 끕니다.

Car 클래서에서 정의된 drive 메소드를 SmartCar에서 오버라이딩한다.

driveMode가 NORMAL이면 super 키워드를 통해 부모 클래스의 drive메소드를 실행하고

SMART이면 자동주행중입니다를 출력한다.

super를 통해서 부모 클래스의 메소드를 접근했다.

+ Recent posts