티스토리 뷰
예시코드
package Day23;
class Z{
	String str;
	Z(String str){
		this.str = str;
	}
}
class A{
	int k;
	String str;
	A(int a){
		this.k = a;
	}
	A(String str, int k){
		
	}
	void print() {
		System.out.println("A");
	}
}
class B extends A{
	int k;
	String str;
	B(){
		super(5);
	}
	
	void changeString() {
		super.k = 5; // 부모꺼
		this.k = 10; // 내꺼
	}
	
}
public class TestSuper {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		B b = new B();
		b.str = "hi";
	
	}
}
B 생성자에서는 A의 생성자를 호출하고 있다.
=> 클래스 안에서 super 키워드는 이 클래스의 부모의 객체를 의미하니까.
=> super만 하면 객체를 의미하는데, 객체 뒤에 괄호를 열고 닫았으니까 이것은 생성자를 의미하고,
그럼 부모 생성자를 호출하는데, 부모 생성자를 봤더니
A(int a){ 
this.k = a; 
}
이게 호출이 된다.
A클래스의 생성자는 두 개지만, 매개변수와 일치하는 것은 위의 것.
A(int a){
this.k = a;
}
얘가 하는 일은
A가 가지고 있는 k에 a값을 설정.
B(){ 
super(5); 
} B가 부모에 5를 넣어줬으면,  5가 int a 값으로 들어가서, 이 5가 k에 들어가는 과정으로 이루어짐.
결과적으로 A에 있는 k가 5.
상속에서는 두 가지가 있음
hiding 과 overriding
먼저 후자는 재정의, 덮어써짐.
전자는 나에 의해서 부모 것이 가려지는 것.
필드 - hiding
메서드 - overriding
여기서의 k는 필드.
package Day23;
class A{
	public int k;
	String str;
	A(int a){
		this.k = a;
	}
	A(String str, int k){
		
	}
	void print() {
		System.out.println("A");
	}
}
class B extends A{
//	int k;
	String str;
	B(){
		super(5);
	}
	
	void changeString() {
		super.k = 5; // 부모꺼
		this.k = 10; // 내꺼
	}
	
}
public class TestSuper {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		B b = new B();
		b.str = "hi";
        System.out.println(b.k);
	
	}
}
원래 b에서 k를 가지고 있지 않아도 B는 A를 상속받기 때문에
A가 k를 가지고 있었으면, B를 통해서 k를 볼 수 있다.
그런데
package Day23;
class A{
	public int k;
	String str;
	A(int a){
		this.k = a;
	}
	A(String str, int k){
		
	}
	void print() {
		System.out.println("A");
	}
}
class B extends A{
	int k;
	String str;
	B(){
		super(5);
	}
	
	void changeString() {
		super.k = 5; // 부모꺼
		this.k = 10; // 내꺼
	}
	
}
public class TestSuper {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		B b = new B();
		b.str = "hi";
        System.out.println(b.k);
	
	}
}
B가 또 자기 k를 가지면, 완전 다른 의미가 된다.
이 때 k는 A의 k가 아님.
A의 k는 hiding이 되고, (B에 의해서 가려지게 되고 )
이 때는 자기 것 k를 말하는 것임.
그런데 자기 클래스 안에서 super 키워드를 명시적으로 붙인 다음에 부르면, 부모 것을 명확하게 의미한다.
728x90
    
    
  반응형
    
    
    
  '[개발] - Java > Mega' 카테고리의 다른 글
| <보충> Day24. 업캐스팅과 다운캐스팅 (0) | 2023.05.04 | 
|---|---|
| <보충> upCasting과 downCasting (1) | 2023.05.03 | 
| <보충> Day28-29 파일 입출력 (0) | 2023.04.30 | 
| <보충> 컬랙션 추가 공부 (2) Map, Set, Queue (0) | 2023.04.28 | 
| Day27. 스타크래프트 문제 코드 비교 (0) | 2023.04.28 | 
 
                            Comments