[기초 자바] 상속의 기초 개념(1)
package may0518;
public class Inheritance {
public static void main(String[] args) {
ChildClass cc = new ChildClass();
cc.childFunc();
System.out.println("///");
cc.parentMethod();
cc.name = ""; //같은 패키지 안에서는 에러 나지 않고 인식됨
}
}
부모클래스인 A클래스가 B클래스에게 상속한다는 말은 , B클래스가 A클래스의 자식클래스가 되어 상속을 받는다는 뜻입니다. 이런 경우에 자식클래스인 B클래스는 A클래스의 멤버 변수와 메서드를 편리하게 사용할 수가 있습니다.
class B extends A{
}
이렇게 표현하는데요, extend라는 단어가 확장하다는 뜻이 있으니 class B가 A의 기능을 확장한다고 이해하면 되겠습니다. A클래스에 우리가 필요한 기능이 있을 때, 굳이 B클래스에 그 기능을 다시 적어서 넣어주지 않고, 그냥 A클래스의 기능을 끌어와서 쓸 수 있어 코드의 길이를 줄이고 더 일목요연한 코드를 만들 수 있습니다.
package may0518;
public class ParentsClass /*extends Object*/{
protected String name;
/*
* private
* public
* protected : 자식 클래스에서 접근을 허용하겠다.
*
*/
public void parentMethod() {
System.out.println("ParantClass parentMethod()");
}
}
그렇다면 부모클래스라면, 그것의 부모클래스는 없는 것일까요? 모든 클래스의 부모클래스는 바로 Object클래스입니다. 모든 자바 클래스의 최상위 클래스로, 우리가 어떤 클래스를 만들때라도 항상 Object클래스로부터 상속을 받습니다. 다만 extends Object 부분이 눈에 보이지 않고, 컴파일 과정에서만 자동으로 쓰이는 것이죠.
package may0518;
public class ChildClass extends ParentsClass {
private int number;
public void childFunc() {
parentMethod();
name = "홍길동";
//private String name으로 해놓으면 ParentsClass가 보이지 않는다고 함, 그러나 있기는 하기 때문에 색은 파란색임.
//외부에서는 접근을 차단한다.
System.out.println("ChildClass childFunc()");
}
}
ParantClass parentMethod()
ChildClass childFunc()
///
ParantClass parentMethod()
제일 위의 main함수 영역에 cc.childFunc();와 cc.parentMethod(); 가 같이 선언되어 있는 것이 보입니다. cc.childFunc는 자식클래스인 본인 클래스의 함수 뿐만 아니라 부모 클래스인 ParentClass의 함수까지 같이 실행합니다. 여기서 보여지는 차이점은 cc.parentMethod();인데요, cc는 ChildClass의 인스턴스임에도 불구하고 ParentClass의 함수인 parentMethod();를 호출할 수 있습니다. 결과는 본인 클래스의 함수가 아닌 부모 클래스의 함수만 출력이 됩니다.