기존 클래스에 기능을 추가하고 재정의하여 새로운 클래스를 정의
다중상속은 불가능
private, default 멤버는 자식클래스에서 접근 불가
super
부모클래스와 자식클래스의 멤버이름이 같을 때 구분하는 키워드
오버라이딩
부모클래스의 메소드를 자식 클래스에서 재정의하는 것(메소드의 선언부는 부모클래스의 메소드와 동일해야 함)
-반환 타입에 한해, 부모클래스의 반환타입으로 변환할 수 있는 타입으로 변경가능
-부모클래스의 메소드보다 접근제어자를 더 좁은 범위로 변경불가
-부모클래스의 메소드보다 더 큰 범위의 예외 선언불가
// Java 프로그래밍 - 상속
class Person {
String name;
int age;
public int a1;
private int a2;
Person() {}
Person(String name, int age) {
this.name = name;
this.age = age;
}
public void printInfo() {
System.out.println("Person.printInfo");
System.out.println("name: " + name);
System.out.println("age: " + age);
}
}
// Student 클래스 - Person 상속, 접근제어자 확인
class Student extends Person{
Student(){
a1 = 1;
}
}
// Student 클래스 - Person 상속, super 사용, 오버라이딩
class Student2 extends Person{
String name;
int stdId;
Student2(String name, int stdId){
this.name = name;
super.name = name;
//super(name, age); // 부모클래스의 생성자 Person 호출
this.age = age;
this.stdId = stdId;
}
public void printInfo() { //오버라이딩
System.out.println("Student2.printInfo");
System.out.println("name: " + name); //부모 클래스로 상속받은 생성자는 null임, 그래서 부모것이 아닌 자기쪽 먼저 참조하도록 Student2 생성자에서 this 적어둠 .
System.out.println("age: " + age);
System.out.println("student id: " + stdId);
}
}
public class Main {
public static void main(String[] args) {
// Test code
// 1. 상속
System.out.println("=============");
Student s1 = new Student();
s1.name = "a";
s1.age = 25;
s1.printInfo();
// 2. super, super(), 오버라이딩
System.out.println("=============");
Student2 s2 = new Student2("b",32, 1);
s2.printInfo();
}
}
'Study for Backend > Programming language - Java' 카테고리의 다른 글
[Java기초] StringBuilder와 StringBuffer (0) | 2024.02.06 |
---|---|
[Java기초] 다형성 (0) | 2024.02.05 |
[Java기초] Class와 객체2 (0) | 2024.02.04 |
[Java기초] Class와 객체1 (0) | 2024.02.04 |
[Java기초] 조건문과 반복문 및 배열 (0) | 2024.02.03 |