Ⅳ. 필드와 static 멤버(필드/메소드)의 중복
1. 인스턴스 필드는 오버라이딩이 되지 않음
※ 오버라이딩 : 덮어쓰는 기능
- 서로 다른 메모리를 가지므로 불가능
// Example 인스턴스 필드의 중복
package sample;
class A {
int m = 3;
}
class B extends A {
int m = 4;
}
public class Main {
public static void main(String[] args) {
// 1. 객체생성
A aa = new A();
B bb = new B();
A ab = new B(); // 참조 변수에 따라서 결정됨 (A)
// 2. 인스턴스 필드
System.out.println(aa.m); // 3
System.out.println(bb.m); // 4
System.out.println(ab.m); // 3
}
}
2. static 필드는 오버라이딩이 되지 않음
// Example1 정적(static) 필드의 중복
package sample;
class A {
static int m = 3;
}
class B {
static int m = 4;
}
public static void main(String[] ar) {
// 1. 클래스 이름으로 바로 접근
System.out.println(A.m); // 3
System.out.println(B.m); // 4
// 2. 객체 생성
A aa = new A();
B bb = new B();
A ab = new B();
// 3. 객체 생성을 통한 static 필드
System.out.println(aa.m); // 3
System.out.println(bb.m); // 4
System.out.println(ab.m); // 3
}
// Example2 정적 메소드의 중복
package sample;
class A {
static void print() {
System.out.println("A 클래스");
}
}
class B extends A{
static void print() {
System.out.println("B 클래스");
}
}
public class Main {
public static void main(String[] args) {
// 1. 클래스 이름으로 바로 접근
A.print(); // A 클래스
B.print(); // B 클래스
System.out.println();
// 2. 객체 생성
A aa = new A();
B bb = new B();
A ab = new B();
// 3. 객체를 통한 메소드 호출
aa.print(); // A 클래스
bb.print(); // B 클래스
ab.print(); // A 클래스
}
}
3. 인스턴스 멤버 / static 멤버 오버라이딩 여부 정리
'Programming Language > Java' 카테고리의 다른 글
상속과 다형성 - 6. 최상위 클래스 Object (0) | 2022.07.12 |
---|---|
상속과 다형성 - 5. super와 super( ) (0) | 2022.07.12 |
상속과 다형성 - 3. 메소드 오버라이딩(Overriding) (0) | 2022.07.12 |
상속과 다형성 - 2. 객체의 타입변환 (0) | 2022.07.12 |
상속과 다형성 - 1. 클래스의 상속 (0) | 2022.07.12 |