C + + 의 계승 과 자바 의 계승 비교

4845 단어 자바c/c++
C + + 에서 상속 은 공유 상속 (public) 보호 상속 (proctected) 과 사유 상속 (private) 으로 나 눌 수 있 으 며, 자바 에 서 는 기본적으로 하나의 상속 (C + + 의 공유 상속 에 해당 함) 만 있 습 니 다. 다음은 코드 를 살 펴 보 겠 습 니 다.
4. 567913. 우 리 는 클래스 A 를 정 의 했 습 니 다. 볼 수 있 습 니 다.
1. 클래스 A 외부 에서 저 희 는 공유 구성원 (Public) 만 방문 할 수 있 고 proctected 와 private 의 구성원 은 모두 방문 할 수 없습니다.
2. 클래스 A 내부 구성원 함 수 는 모든 구성원 에 게 접근 할 수 있 습 니 다. (public, proctected, private) 을 포함 합 니 다.
위의 이 두 가지 특징 은 자바 와 완전히 같다.
다음은 B 류 가 자 A 류 를 계승 하도록 하 겠 습 니 다. 코드 는 다음 과 같 습 니 다.
4. 567913. 위의 상속 을 사유 상속, 보호 상속, 공유 상속 으로 바 꾸 면 다음 과 같은 결론 이 있다.
1. 하위 클래스 B 내부 에서 부모 클래스 의 비 private 구성원 을 방문 할 수 있 습 니 다.
2. 하위 클래스 B 와 부모 클래스 A 는 클래스 외부 에서 접근 할 수 없 는 개인 (private) 구성원 입 니 다.
3. 공유 상속 (public) 이 라면 하위 클래스 B 는 외부 에서 부모 클래스 A 의 공유 속성 (예 를 들 어 Apublic () 방법) 을 방문 할 수 있 습 니 다.
4. 사유 상속 과 보호 상속 이 라면 하위 클래스 B 는 외부 에서 클래스 A 에 접근 할 수 없 는 모든 속성 입 니 다.
5. 보호 상속 이 라면 B 류 에서 A 류 의 보호 속성 과 공유 속성 을 모두 보호 속성 으로 계승 하고 같은 이유 로 사유 상속 을 한다.
위의 설명 은 약간 복잡 할 수 있 습 니 다. 사실은 우 리 는 위의 결론 에서 다음 과 같은 결론 을 볼 수 있 습 니 다. 계승 방식 (Public, proctected, private) 은 하위 클래스 가 부모 속성 을 계승 하 는 방문 권한 (private, proctected, Public) 을 바 꿀 수 있 습 니 다. 다음 과 같 습 니 다.
 
public
protected
private
공유 상속
public
protected
보이 지 않다
사유 상속
private
private
보이 지 않다
보호 상속
protected
protected
보이 지 않다
위의 분석 을 통 해 알 수 있 듯 이 계승 방식 은 하위 클래스 가 하위 클래스 속성 을 계승 하 는 방문 구역 을 바 꿀 수 있 기 때문에 이때 하위 클래스 C 가 B 류 에서 계승 하면 C 류 가 A 류 구성원 에 대한 방문 에 도 영향 을 줄 수 있다.
다음은 자바 의 계승 을 살 펴 보 겠 습 니 다. 먼저 코드 를 보 겠 습 니 다.
#include 
using namespace std;

class A{
	int aprivate;
	void Aprivate(){
		cout << "A  private  " << endl;
	}
protected:
	int aprotected;
	void Aprotected(){
		cout << "A  protected  " << endl;
	}
public:
	A(){}
	A(int a, int b, int c):aprivate(a), aprotected(b), apublic(c){}
	int apublic;
	void Apublic(){
		cout << "A  public  " << endl;
	}
};

//class B : private A{
	
//public:
//	B(){}
//	B(int a, int b, int c):A(a, b, c){}
//	void Bpublic(){
//		Aprotected();
//		cout << "B  public  ----" << aprotected << endl;
//	}
//};

int main(){
	A a(100, 200, 300);
	a.Apublic();
//	a.Aprotected();
//	a.Aprivate();
	cout << a.apublic << endl;
//	cout << a.aprotected << endl;
//	cout << a.aprivate << endl;

	return 0;
}

4. 567913. 볼 수 있 습 니 다.
1. 자바 가 C + + 보다 friendly 접근 권한 이 많아 졌 습 니 다. C + 에 가방 이 없 는 개념 (네 임 스페이스) 이 어야 합 니 다.
2. 자바 의 proctected 속성 은 클래스 외부 에서 접근 할 수 있 습 니 다.
3. 자바 의 friendly 속성 은 같은 가방 의 클래스 외부 에서 접근 할 수 있 습 니 다.
메모: proctected 속성 도 같은 가방 류 에 접근 할 수 있 습 니 다. Test 류 와 A 류 가 같은 가방 에 없 으 면 위의 a. A friendly () 와 a. A proctected () 는 모두 접근 할 수 없습니다.
class B : private A{
	
public:
	B(){}
	B(int a, int b, int c):A(a, b, c){}
	void Bpublic(){
		Aprotected();
		cout << "B  public  ----" << aprotected << endl;
	}
};
public class A {
	
	private int aprivate;
	int afriendly;
	protected int aprotected;
	public int apublic;
	
	private void Aprivate(){
		System.out.println("A  private  ");
	}
	
	void Afriendly(){
		System.out.println("A  friendly  ");
	}
	
	protected void Aprotected(){
		System.out.println("A  protected  ");
	}
	
	public void Apublic(){
		System.out.println("A  public  ");
	}
}

볼 수 있 습 니 다:
1. 자바 의 상속 은 구분 되 지 않 기 때문에 상속 후 C + + 의 공유 상속 에 해당 합 니 다.
2. 자바 의 proctected 구성원 은 클래스 외부 에서 접근 할 수 있 습 니 다 (proctected 와 friendly 의 전 제 는 같은 가방 에서).
다음은 한 가지 특징 을 살 펴 보 겠 습 니 다.
4. 567913. 볼 수 있 습 니 다.
1. 하위 클래스 B 에서 A 클래스 의 Afriendly 방법 을 다시 쓸 때 접근 권한 을 확대 할 수 있 습 니 다 (예 를 들 어 위의 Public)
2. 자바 의 파일 중 하나의 Public 클래스 만 있 을 수 있 습 니 다.
3. 자바 의 외부 클래스 (대응 하 는 것 은 내부 클래스, 여 기 는 잠시 언급 하지 않 음) 는 Public 또는 friendly 로 만 수식 되 고 private 또는 protected 로 수식 되 지 않 습 니 다.
마지막 으로 우리 가 총 결 을 하나 하 자.
1. 자바 에 서 는 네 가지 권한 이 있 습 니 다. Public 는 전체 프로젝트 에 접근 할 수 있 습 니 다. proctected 속성 은 이 클래스 와 하위 클래스 의 전체 프로젝트 에 접근 할 수 있 습 니 다. friendly 속성 은 이 클래스 의 전체 프로젝트 에 접근 할 수 있 고 private 는 이 클래스 내부 에서 만 접근 할 수 있 습 니 다.
2. C + + 에서 3 중 권한 을 가 집 니 다. Public 는 전체 프로젝트 에 접근 할 수 있 습 니 다. proctected 속성 은 이 클래스 내부 와 하위 클래스 의 내부 에서 만 접근 할 수 있 고 private 속성 은 하위 클래스 내부 에서 만 접근 할 수 있 습 니 다.
또한 C + + 에서 더 계승 할 수 있 습 니 다. 더 계승 하 는 예 는 다음 과 같 습 니 다.
public class Test {
	
	public static void main(String[] args) {
		A a = new A();
		//a.Aprivate();
		a.Afriendly();
		a.Aprotected();
		a.Apublic();
		//System.out.println(a.aprivate);
		System.out.println(a.afriendly);
		System.out.println(a.aprotected);
		System.out.println(a.apublic);
	}
}

다음으로 전송:https://www.cnblogs.com/lanzhi/p/6468633.html

좋은 웹페이지 즐겨찾기