[개발] - Java/Mega
Day23. super 보충
완벽한 장면
2023. 4. 30. 12:50
예시코드
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
반응형