2020. 3. 12. 17:01ㆍStudy/Computer Science
1. 상속의 특징
메소드 오버라이드
지난 시간에 언급했듯이 부모 클래스의 기능을 자식 클래스에서 재정의 해서 사용하는 것.
class ParentClass {
public ParentClass() {
System.out.println("ParentClass constructor");
}
public void makeJJajang() {
System.out.println("--makeJJajang() START--");
}
}
class ChildClass extends ParentClass {
public ChildClass() {
System.out.println("ChildClass constructor");
}
@Override
public void makeJJajang() {
System.out.println("--more delicious makeJJajang() START--");
}
}
class MainClass{
public static void main(String Args[]) {
ChildClass c1 = new ChildClass();
c1.makeJJajang(); //생성자 작동시 나오는 두 문구 이후에 "--more delicious makeJJajang() START--" 출력
ParentClass p1 = new ParentClass();
p1.makeJJajang(); // ParentClass 생성자 작동시 나오는 문구 이후 "ChildClass constructor" 출력
}
}
Override를 한 뒤 c1.makeJJajang()의 결과, ParentClass로 부터 상속받은 c1.makeJJajang()이 수정된 코드대로 작동했다. 하지만 p1.makeJJajang()은 Override 이후에도 그대로 유지되었다. 따라서 Override된 메서드는 상속받은 클래스 안에서만 수정된 상태로 사용가능하다는 것을 알 수 있다.
Q. 위의 코드에서 class 선언시 앞에 public을 붙여서 public class라고 하면 오류가 생긴다 왜인지 물어봐야할 듯
자료형(타입)
기본 자료형 처럼 클래스도 자료형이다.
class ParentClass {
public ParentClass() {
System.out.println("ParentClass constructor");
}
public void makeJJajang() {
System.out.println("--makeJJajang() START--");
}
}
class ChildClass extends ParentClass {
public ChildClass() {
System.out.println("ChildClass constructor");
}
@Override
public void makeJJajang() {
System.out.println("--first child makeJJajang() START--");
}
}
class secondChildClass extends ParentClass {
public secondChildClass() {
System.out.println("secondChildClass constructor");
}
@Override
public void makeJJajang() {
System.out.println("--second child makeJJajang() START--");
}
}
class MainClass{
public static void main(String Args[]) {
ParentClass children[] = new ParentClass[2];
children[0] = new ChildClass();
children[1] = new secondChildClass();
for (int i = 0; i< children.length;i++) {
children[i].makeJJajang();
}
}
}
전에 배열에서 java에서 배열을 int arr[] = new int[3] 과 같이 선언했듯이 클래스 또한 위와 같이 자료형으로 사용하여 배열로 만들 수 있다.
내부 클래스와 익명 클래스
내부 클래스
클래스 안에 또 다른 클래스를 선언하는 것으로 이렇게 하면 두 클래스의 멤버에 쉽게 접근 가능하다.
익명 클래스
이름이 없는 자식 클래스라고 생각하면 되겠다. 예를 들어 아래와 같은 클래스가 있다.
public class Test{
private int num = 1;
public int getNum(){
return this.num;
}
public void setNum(int num){
this.num = num;
}
}
여기서 우리가 평상시처럼 인스턴스를 생성할 때는
Test t1 = new Test();
위와 같이 사용하는데, 여기서의 인스턴스의 이름은 클래스 이름 'Test'이다. 이것이 이름이 있는 클래스이다.
아래는 익명 클래스이다.
Test t1 = new Test(){
public int num = 10;
@Override
public int getNum(){
return this.num;
}
};
이 클래스의 이름은 'Test'일까? 아니다. 이는 부모클래스의 역할 (어디까지나 역할이다)을 하는 Test에게 상속받은 자식클래스의 역할을 하는 익명의 클래스이다. 따라서 이 클래스의 this.num의 값은 10이다. 이름이 없으므로 생성자도 선언 할 수 없다.
'Study > Computer Science' 카테고리의 다른 글
Java 프로그래밍 기초 9 - 인터페이스와 추상 클래스 (0) | 2020.03.13 |
---|---|
Data Structure - Tree (2) (0) | 2020.03.12 |
Data Structure - Trees (1) (1) | 2020.03.11 |
Java 프로그래밍 기초 7 (0) | 2020.03.11 |
Data Sturcture - Queue (1) | 2020.03.10 |