대학교

자바 - (9) 상속

매 석 2023. 11. 21. 22:20
반응형

클래스 상속

출처 : 혼자 공부하는 자바

부모 클래스에서 private 접근 제한 갖는 것은 상속 대상에서 제외된다.

또한 다른 패키지에 존재할 경우 deafult 접근 제한된 것도 제외된다.

 

부모 생성자 호출

자식 객체를 생성할 때 부모 객체가 먼저 생성되고 그 다음 자식 객체가 생성된다.

출처 : 혼자 공부하는 자바

출처 : 혼자 공부하는 자바

명시적으로 부모 생성자를 호출하려는 경우 자식 클래스에서 super를 사용한다.

 

매소드 재정의

부모 클래스의 메소드가 자식 클래스에서 사용하기에 부적합한 경우 자식 클래스에 수정하여 사용한다.

출처 : 혼자 공부하는 자바

이미 자식 클래스에서 재정의된 메소드를 출력하기 위해 super를 붙여서 부모 메소드를 호출할 수 있다.

 

final 클래스와 final 메소드

해당 선언이 최종 상태이며 수정될 수 없다.

final 클래스는 부모 클래스가 될 수 없어 자식 클래스를 만들 수 없음을 의미한다.

또한 재정의도 불가하다.

출처 : 혼자 공부하는 자바

 

실습 문제

실습문제 1

PeopleApp.java

package PeopleApp;
import exam02.*;

public class PeopleApp2 {

	public static void main(String[] args) {
		StudentWorker s = new StudentWorker("홍길동","0000000",1234,100000);
		AirForce a = new AirForce("김대위","000000",2345,"F-16팰콘");
		Army ar = new Army("라이언일병","000000",3456,"K1A1");
		s.show();
		a.show();
		ar.show();
	}

}


class StudentWorker extends Student {
	int salary;
	public StudentWorker(String name, String ssn, int studentNo, int salary) {
		super(name, ssn, studentNo);
		this.salary=salary;
	}
	void show() {
		System.out.printf("이름 %s 학번 %d 월급 %d원\n",name,studentNo,salary);
	}
}

class Soldier extends People{
	int soldierNo;
	public Soldier(String name, String ssn,int soldierNo) {
		super(name, ssn);
		this.soldierNo = soldierNo;
	}
	
}

class AirForce extends Soldier{
	String fighter;
	public AirForce(String name, String ssn, int soldierNo, String fighter) {
		super(name, ssn, soldierNo);
		this.fighter=fighter;
	}
	void show() {
		System.out.printf("이름 %s 군번 %d 전투기 %s\n",name,soldierNo,fighter);
	}
	
}

class Army extends Soldier{
	String tank;
	public Army(String name, String ssn,int soldierNo,String tank) {
		super(name, ssn, soldierNo);
		this.tank=tank;
	}
	void show() {
		System.out.printf("이름 %s 군번 %d 탱크 %s\n",name,soldierNo,tank);
	}
}

 

People.java

package exam02;

public class People {
	public String name;
	public String ssn;
	
	public People(String name, String ssn) {
		this.name = name;
		this.ssn = ssn;
	}
}

 

Student.java

package exam02;


public class Student extends People{
	public int studentNo;
	
	public Student(String name, String ssn, int studentNo) {
		super(name, ssn);
		this.studentNo = studentNo;
	}
}

 

실습문제 2

PeopleApp.java

package PeopleApp;
import exam02.*;

public class PeopleApp2 {

	public static void main(String[] args) {
		StudentWorker s = new StudentWorker("홍길동","0000000",1234,100000);
		AirForce a = new AirForce("김대위","000000",2345,"F-16팰콘");
		Army ar = new Army("라이언일병","000000",3456,"K1A1");
		s.show();
		a.show();
		ar.show();
	}

}


class StudentWorker extends Student {
	int salary;
	public StudentWorker(String name, String ssn, int studentNo, int salary) {
		super(name, ssn, studentNo);
		this.salary=salary;
	}
	void show() {
		System.out.printf("이름 %s 학번 %d 월급 %d원\n",name,studentNo,salary);
	}
}

class Soldier extends People{
	int soldierNo;
	public Soldier(String name, String ssn,int soldierNo) {
		super(name, ssn);
		this.soldierNo = soldierNo;
	}
	void show() {
		System.out.printf("이름 %s 군번 %d",name,soldierNo);
	}
}

class AirForce extends Soldier{
	String fighter;
	public AirForce(String name, String ssn, int soldierNo, String fighter) {
		super(name, ssn, soldierNo);
		this.fighter=fighter;
	}
	@Override
	void show() {
		super.show();
		System.out.printf("전투기 %s\n",fighter);
	}
	
}

class Army extends Soldier{
	String tank;
	public Army(String name, String ssn,int soldierNo,String tank) {
		super(name, ssn, soldierNo);
		this.tank=tank;
	}
	
	@Override
	void show() {
		super.show();
		System.out.printf("탱크 %s\n",tank);
	}
}