Java super 와 super()
2023. 1. 27. 12:53ㆍJava
super 키워드
super 키워드는 부모 클래스로부터 상속받은 필드나 메소드를 자식 클래스에서
참조하는 사용하는 참조 변수라고 한다.
인스턴스 변수의 이름과 지역 변수의 이름이 같을 경우 인스턴스 변수 앞에
this 키워드를 사용하여 구분할 수 있다. 이와 마찬가지로 부모 클래스의 멤버와
자식 클래스의 멤버 이름이 같을 경우 super 키워드를 사용하여 구별할 수 있다고 한다.
이렇게 자바에서는 super 참조 변수를 사용하여 부모 클래스의 멤버에 접근할 수 있다.
this와 마찬가지로 super 참조 변수를 사용할 수 있는 대상도 인스턴스 메소드뿐이며,
클래스 메소드에서는 사용할 수 없다고 한다.
class Parent {
int a = 10;
}
class Child extends Parent {
int a = 20;
void display() {
System.out.println(a);
System.out.println(this.a);
System.out.println(super.a);
}
}
public class Inheritance03 {
public static void main(String[] args) {
Child ch = new Child();
ch.display();
}
}
실행 결과
20
20
10
위의 예제에서 int형 변수 a는 자식 클래스인 Child 클래스에서도 선언되어 있다.
따라서 지역 변수와 this 참조 변수는 자식 클래스에서 대입된 값을 출력하며,
super 참조 변수만이 부모 클래스에서 대입된 값을 출력하게 된다.
============================================================
프로젝트 내 src 내 javabasic 패키지 내 Ex11Inheri.java
package javabasic;
class SuperObj3 {
// 접근지정자 디폴트는 같은 패키지일경우에만 접근이 가능하다
String name;
int age;
SuperObj3() {
System.out.println("부모 생성자 호출");
}
}
///////////////////////////////////
class SubObj3 extends SuperObj3 {
String hp;
SubObj3() {
System.out.println("자식 생성자 호출");
this.name = "이미자";
super.age = 30;
hp = "010-222-3333";
}
public void write() {
// TODO Auto-generated method stub
System.out.println("이름:" + name);
System.out.println("나이:" + age);
System.out.println("핸드폰:" + hp);
}
}
public class Ex11Inheri {
public static void main(String[] args) {
// TODO Auto-generated method stub
SubObj3 sub = new SubObj3();
// write가 서브클래스에서 오버라이드되어있다면
// 서브클래스의 write가 호출된다
// 만약 없다면 부모클래스의 write 가호출된다
sub.write();
}
}
실행 결과
부모 생성자 호출
자식 생성자 호출
이름:이미자
나이:30
핸드폰:010-222-3333
'Java' 카테고리의 다른 글
Java super() 생략 가능 (0) | 2023.01.27 |
---|---|
Java @Override (0) | 2023.01.27 |
Java super() (0) | 2023.01.27 |
Java 상속 (0) | 2023.01.27 |
Java StringTokenizer (0) | 2023.01.27 |