본문 바로가기
Java/Java

[Java] 상속

by 기록하는_사람 2022. 10. 14.

상속

📌상속

: 부모 클래스의 속성을 자식 클래스가 물려 받는 것.

  extends

 

📌 상속은 연관된 클래스들에 대한 공통적인 규약을 정의할 수 있음.

 

📌 상위 클래스, 기초 클래스, 부모 클래스

      하위 클래스, 유도 클래스, 자식 클래스 

 

📌 하위 클래스의 인스턴스 생성 시 상위 클래스, 하위 클래스의 생성자가 모두 호출되며,

      상위 클래스의 생성자가 먼저 호출됨. 

 

📌 super()

: 상위 클래스 생성자 호출. 

  하위 클래스 생성자의 가장 위에 등장해 가장 먼서 실행되어야 함. 

 

📌 상위 클래스 생성자를 호출하지 않으며, 인자가 없는 상위 클래스 생성자가 자동으로 호출됨. 

 

📌 자바는 단일 상속만 지원함. 

 

📌 상위 클래스에 위치한 클래스 변수와 메소드를 하위 클래스에서도 접근 가능.

      (단, 접근 수준 지시자가 접근을 허용할 때.)

 

📌 모든 클래스는 Object 클래스를 상속함.

 

📌 instanceof

: 상속하는 클래스를 묻는 연산자.

if(c1 instanceof c2) {
	c1이 참조하는 인스턴스가 c2의 인스턴스이거나 c2를 상속하는 클래스의 인스턴스면 true.
}
else {
	아니면 false
}

 

📌 final

:  다른 클래스가 상속하지 못하게 함.  

  메소드에 추가하면, 해당 메소드의 오버라이딩을 허용하지 않음. 

 

📌 어노테이션(Annotations)

: 자바 컴파일러에게 메시지를 전달하는 목적의 메모.

  컴파일 과정에서 확인되지 않는 오류가 발생하는 것을 차단함. 

 

📌 @override

: 상위 클래스의 메소드를 오버라이딩할 거라고 컴파일러에게 알려주는 어노테이션(Annotations)

 

📄 Person과 Student의 정보 입력하고 출력하는 프로그램.

📄  Person.java

package extend;

public class Person {
	protected static int count = 0;  // proteceted : 하위 클래스가 접근 가능. 
	
	protected String name;
	protected int id;
	
	public Person() {  // 디폴트 생성자.
		name = "None";
		id = -1;
		count++;
	}
	
	public Person(String name, int id) {  // 생성자.
		this.name = name;
		this.id = id;
		count++;
	}
	
	public void printCount() {
		System.out.println(count);
	}

	public void printInfo() {
		System.out.println(name + "\t" + id);
	}
}

📄  Student.java

package extend;

public class Student extends Person {
	private int classNum;
	private String subject;
	
	public Student(int classNum, String subject) {
		super();  // 상위 클래스 디폴트 생성자 호출.
		
		this.classNum = classNum;
		this.subject = subject;
	}
	
	public Student(String name, int id, int classNum, String subject) {
		super(name, id);  // 상위 클래스 생성자 호출. 
		
		this.classNum = classNum;
		this.subject = subject;
	}
	
	public void printInfo() {
		System.out.println(name + "\t" + id + "\t" + classNum + "\t" + subject);
	}
}

📄  PersonMain.java

package extend;

public class PersonMain {

	public static void main(String[] args) {
		Person p1 = new Person("jin", 1204);
		Person p2 = new Person("jimin", 1013);
		
		p1.printInfo();
		p1.printCount();
		
		p2.printInfo();
		p2.printCount();
		
		Student s1 = new Student("hani", 1004, 17, "math");
		Student s2 = new Student(5, "kor");

		s1.printInfo();
		s1.printCount();
		
		s2.printInfo();
		s2.printCount();
	}

}


// jin	1204
// 2
// jimin	1013
// 2
// hani	1004	17	math
// 4
// None	-1	5	kor
// 4

 

'Java > Java' 카테고리의 다른 글

[Java] 템플릿 메서드  (0) 2022.10.15
[Java] 추상 클래스(Abstract Class)  (0) 2022.10.15
[Java] ArrayList  (0) 2022.10.14
[Java] 배열(Array)  (0) 2022.10.14
[Java] 콘솔 입출력  (0) 2022.10.14

댓글