728x90
자바는 extends 키워드를 사용하여 상속할 수 있다.
class A {
}
class B extneds A {
}
상속 관계에서 생성자 호출 순서
부모 클래스의 생성자 먼저 호출이 되고 그다음 자식 클래스의 생성자가 호출된다.
class A{
A(){
System.out.println("부모클래스 생성자");
}
A(int a){
System.out.println("부모클래스 매개변수 생성자" + a);
}
}
class B extends A{
B(){
super(1); //첫 번째 줄에 위치해야함
System.out.println("자식 생성자");
}
}
public class test {
public static void main(String[] args) {
B b = new B();
}
}
super() 메서드를 사용하여 인자 값에 맞는 부모의 생성자를 명시적으로 호출할 수 있다.
super() 메서드는 생성자 내에서 가장 첫 번째 줄에 위치해야 한다.
메서드 오버라이딩
상속받은 메서드를 자식클래스에서 재정의 하는 것
import java.util.Scanner;
class A{
A(){
System.out.println("부모클래스 생성자");
}
A(int a){
System.out.println("부모클래스 매개변수 생성자" + a);
}
public void print() {
System.out.println("A클래스 메서드");
}
}
class B extends A{
B(){
super(1);
System.out.println("자식 생성자");
}
public void print(){
System.out.println("재정의한 B클래스 메서드");
}
}
public class test {
public static void main(String[] args) {
B b = new B();
b.print();
}
}
업캐스팅
자식 클래스의 객체를 부모 클래스의 참조 변수로 참조하는 것
import java.util.Scanner;
class A{
A(){
System.out.println("부모클래스 생성자");
}
A(int a){
System.out.println("부모클래스 매개변수 생성자" + a);
}
public void print() {
System.out.println("A클래스 메서드");
}
}
class B extends A{
B(){
super(1);
System.out.println("자식 생성자");
}
public void print(){
System.out.println("재정의한 B클래스 메서드");
}
public void printB() {
System.out.println("B클래스 메서드");
}
}
public class test {
public static void main(String[] args) {
B b = new B();
A a = new B(); // 업캐스팅
b.print();
a.print();
//a.printB() 자식 클래스 메서드 사용불가
}
}
자식 객체를 생성하고 부모의 참조 변수로 참조하면 자식의 멤버 변수, 메서드는 사용할 수 없다.
단 오버라이딩한 경우 자식 객체의 메서드가 실행된다.
'Java' 카테고리의 다른 글
Java 어노테이션 (0) | 2025.04.06 |
---|---|
자바 클래스 (0) | 2024.06.17 |
추상클래스, 인터페이스 (0) | 2024.05.23 |
자바에서 메소드 내부에 메소드를 못 만드는 이유 (1) | 2023.10.19 |