C++ 자바 상속 비교
상속의 목적은 C++과 자바 모두 동일합니다.
우리가 상속을 받는 목적은 코드를 재사용하거나 is-a 관계를 생성하기 위함입니다.
그렇다면 이 두 객체지향언어(Object-Oriented Laguage)의 상속의 차이점에 대해 비교해보겠습니다.
◎ 자바에서 모든 클래스(Class)는 직접 또는 간접적으로 Object Class에서 상속받습니다. 자바에서 상속받지 않는 클래스를 작성하면 기본적으로 Object 클래스에서 자동으로 상속됩니다.
◎ 자바에서는 부모의 부모(조부모; GrandParent) 클래스에 직접 접근할 수 없습니다.(not directly accessible, c++에서는 :: 연산자를 사용하여 접근 가능합니다.) 부모의 부모 클래스에 접근하기 위해서는 부모 클래스를 통해 접근할 수 있습니다.
예)
class GrandParent {
public void Print() {
System.out.println("GrandParent");
}
}
class Parent extends GrandParent {
public void Print() {
System.out.println("Parent");
}
}
class Child extends Parent {
super.super.Print(); // 에러 발생!!
public void Print() {
System.out.println("parent");
}
}
class Main {
public static void main(String args[]) {
Child c = new Chid();
c.Print();
}
}
위 코드는 super.super.Print() 줄에서 오류가 발생합니다. 아래 코드처럼 수정할 수 있습니다.
class GrandParent {
public void Print() {
System.out.println("GrandParent");
}
}
class Parent extends GrandParent {
super.Print();
public void Print() {
System.out.println("Parent");
}
}
class Child extends Parent {
super.Print(); // 부모 클래스를 통해 접근 가능!
public void Print() {
System.out.println("parent");
}
}
class Main {
public static void main(String[] args) {
Child c = new Chid();
c.Print();
}
}
◎ 상속받지 않은 다른 클래스에서 protected 멤버에 접근할 수 있습니다.(클래스가 같은 패키지에 존재 해야합니다.)
예)
class A {
protected int x = 10;
}
class B {
public static void main(String[] args) {
A a = new A();
System.out.println(a.x); // 접근 가능!!
}
}
◎ 자바에서 상속은 extends 키워드를 사용합니다. C++과 달리 public, protected, private과 같은 지정자를 제공하지 않습니다.
◎ 자바에서 메소드는 기본적으로 가상(Virtual) 메소드입니다. C++에서는 virtual 키워드를 명시적으로 사용해야 합니다.
예)
class A {
public void Print() {
System.out.println("A");
}
}
class B extends A {
public void Print() {
System.out.println("B");
}
}
class Main {
public static void main(String[] args) {
A a = new B();
b.show(); // B가 출력!!
}
}
◎ 자바는 추상클래스(abstract)와 인터페이스(interface)를 구분된 키워드로 사용합니다.
◎ 자바는 다중 상속(둘 이상의 클래스에서 상속)을 지원하지 않습니다. C++은 지원합니다.
코드는 직접 작성했기 때문에 오타 때문에 정상적으로 작동하지 않을 수 있습니다.
해당 게시글에 대한 궁금한점 있으시면 댓글로 달아주시면 답변 해 드리겠습니다.
공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.
'C, C++' 카테고리의 다른 글
C/C++ 구조체 사용법 및 예제 (1) | 2018.10.08 |
---|---|
C/C++ 배열 사용법 (0) | 2018.10.05 |
C 파일처리 (0) | 2018.10.02 |
C++ 벡터 사용법 (2) | 2018.09.26 |
C언어 포인터 (8) | 2018.09.25 |
C 랜덤 - 난수 생성하기 (7) | 2018.09.06 |
C++ String 문자열 사용법 정리 (0) | 2018.08.20 |
[C++] C# 연동하기 / C# dll 파일 만들기 (1) | 2018.08.18 |