개념 : 상속은 클래스의 정의가 다른 기존 클래스를 기반으로 할 수 있음을 의미합니다. 즉, 서브 클래스는 부모 클래스를 상속하여 상위 클래스 코드의 재사용을 실현합니다. 두 클래스 간의 관계 : 부모 클래스는 일반적으로 각 서브 클래스에 공통의 특성을 가지고 있으며 서브 클래스는 좀 더 개인화 된 방법을 추가 할 수 있습니다. 클래스 상속은 전이적이며, 즉, 서브 클래스는 서브 클래스를 계속 도출 할 수 있으며, 상위 레벨에 위치한 클래스 개념은 더 추상적이며, 낮은 수준에 위치한 클래스의 개념은 더 구체적입니다.
1. 서브 클래스 정의 :
구문 형식
[Modifier] 클래스 서브 클래스 이름 확장 부모 클래스 이름 {
아강
}
수정 자 : 공공 개인 보호 기본값
서브 클래스 본체는 상위 클래스의 내용을 상속받은 서브 클래스에 의해 추가 된 새로운 고유 컨텐츠입니다. 멤버 변수, 멤버 방법, 클래스, 인터페이스, 시공 방법 등이 포함될 수 있습니다.
예를 들어, 회사의 직원은 회사가 고용 한 직원이며 관리자는 관리 회사의 특별 직원입니다. 이러한 유형의 특수 직원은 일반 직원의 속성과 방법뿐만 아니라 특별한 수당과 같은 자체 속성과 방법을 가지고 있습니다.
코드는 다음과 같습니다.
공개 클래스 EmployeeClass {개인 문자열 이름; // 이름 개인 int ID; // 회사 번호 개인 이중 급여; // 급여 개인 문자열 부서; // 부서 public EmployeeClass () {} public EmployeeClass (문자열 이름, int id, 이중 급여, 문자열 부서) {this.name = name; this.id = id; this.salary = 급여; this.department = 부서; } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } public int getId () {return id; } public void setid (int id) {this.id = id; } public double getSalary () {반환 급여; } public void setSalary (이중 급여) {this.salary = 급여; } public String getDepartment () {반환 부서; } public void setDepartment (문자열 부서) {this.department = 부서; } @override public String toString () {return "eployeeclass [name =" + name + ", id =" + id + ", Salary =" + Salary + ", Department =" + Department + "]; }}이것은 직원 클래스의 코드이며, 여기에는 네 가지 속성, 이름, 번호, 급여, 부서가 있습니다.
공개 클래스 ManagerClass는 EmployeeClass를 확장합니다. {Private Double Specialsalary; Public ManagerClass () {super ();} public managerclass (문자열 이름, int id, double senary, string department, double specialsalary) {super (이름, id, 급여, 부서); this.specialsalary = Specialsalary; } public double getSpecialSalary () {return SpecialSalary; } public void setSpecialSalary (Double SpecialsAlary) {this.specialsalary = SpecialSalary; } @override public String toString () {return super.toString () + "/SpecialSal :" + SpecialSalary; }}이것은 자체 속성, 특별 수당을 가진 서브 클래스, 관리자 클래스입니다.
2. 부모 클래스 멤버에 대한 서브 클래스 접근성
서브 클래스는 상위 클래스의 구성원을 상속받을 수 있지만 부모 클래스의 구성원에 대한 액세스는 액세스 기능에 의해 제어됩니다.
부모 수업과 아동 수업은 동일한 패키지에 있습니다. 비공개에 직접 액세스 할 수는 없지만 공개 액세스 속성이있는 회원 메소드를 통해 부모 클래스의 개인 구성원을 얻을 수 있습니다.
학부모 수업과 아동 수업은 동일한 패키지에 있지 않습니다. 개인 및 기본값에 직접 액세스 할 수는 없지만 공개 및 보호 된 액세스 속성을 사용하여 멤버 메소드를 통해 부모 클래스의 개인 구성원을 얻을 수 있습니다.
3. 클래스 멤버 메소드의 과부하 및 덮어 쓰기
서브 클래스에 정의 된 새 멤버 변수의 이름이 상위 클래스의 멤버 변수와 동일하면 서브 클래스는 상위 클래스의 해당 멤버 변수를 숨 깁니다.
멤버 메소드의 과부하 또는 재정의는 부모 클래스에 정의 된 멤버 메소드의 이름이 상위 클래스의 멤버 메소드의 이름과 동일 할 때 서브 클래스에 정의 된 멤버 메소드입니다.
(1) 멤버 방법의 과부하
앞에서 언급 한 직원 및 관리자 Chestnut에서 직원 수업에서 회원 방법을 정의 할 수 있습니다.
public void setInfo (문자열 이름, int id, 이중 급여, 문자열 부서) {this.name = new String (name); this.id = id; this.salary = 급여; this.department = 새 문자열 (부서); }관리자 클래스에서는 다음과 같이 정의 할 수 있습니다.
Public Void SetInfo (문자열 이름, int id, 이중 급여, 문자열 부서, Double Specialsalary) {Super (이름, ID, 급여, 부서); this.specialsalary = Specialsalary; }이것은 멤버 메소드의 과부하입니다
(2) 멤버 방법의 재정의
일반적으로 두 가지 형태가 있습니다.
subclass 서브 클래스에 의해 정의 된 멤버 메소드에서 먼저 상위 클래스에서 재정의 멤버 메소드를 호출 한 다음 일부 조작 문을 추가하십시오.
subclass 서브 클래스에 의해 정의 된 멤버 메소드에서는 부모 클래스에 의해 무시되는 멤버 메소드가 호출되지 않지만 명세서 그룹이 다시 작성됩니다. 이를 통해 상위 클래스를 전체적으로 적용 할 수 있습니다. 이 방법은 서브 클래스의 작동이 상위 클래스 객체의 작동과 완전히 다른 경우 구현해야합니다.
밤나무:
객체 클래스에는 두 개의 객체가 동일한지 여부를 결정하는 멤버 메소드와 같은 멤버 메소드가 있습니다.
public boolean euqals (Object obj) {return (this == obj); }이 멤버 방법은 두 객체가 동시에 하나의 객체를 참조하는지 여부를 비교하는 것임을 알 수 있습니다.
그러나 이제 우리는 동일한 유형의 두 객체의 내용이 동일한지 여부를 비교하는 함수를 구현하기를 희망합니다. 그래서 우리는 아래에 복수 수업을 가지고 있으며, 각 복수 계급은 실제 부분과 가상의 부분으로 구성됩니다. 설계 기능은 두 개의 복소수가 동일한지 비교할 수 있습니다. 코드는 다음과 같습니다.
공개 클래스 ComplexNumber {Private Double Re; 개인 이중 IM; public complexnumber () {re = 0.0; im = 0.0;} public complexnumber (double re, double im) {this.re = re; this.im = im; } public double getre () {return re; } public void setre (double re) {this.re = re; } public double getim () {return im; } public void setim (double im) {this.im = im; } public boolean Equals (Object OtherObject) {if (this == OtherObject) true; if (otherObject == null) false를 반환합니다. if (getClass ()! = OtherObject.getClass ()) false를 반환합니다. ComplexNumber Other = (ComplexNumber) OtherObject; if ((re == Other.re) && (im == Other.im)) true를 반환합니다. 그렇지 않으면 거짓을 반환합니다. } public String toString () {String str = ""; if (re! = 0) str += re; if (im == 0) RETURN STR; if (im <0) str += im +"i"; else str + = " +" + im + "i"; Return str; } public static void main (String [] args) {ComplexNumber C1, C2; C1 = New ComplexNumber (2,3); C2 = New ComplexNumber (2, -3.4); if (c1.equals (c2)) {system.out.println ( "(" +c1 +") == (" +c2 +")"); } else {system.out.println ( "(" +c1 +") <> (" +c2 +")"); }}}결과는 (2.0 + 3.0i) <> (2.0-3.4i)입니다.
위의 것은 편집자가 당신에게 가져 오는 상속에 대한 Java의 주요 이해에 대한 간단한 논의입니다. 모두가 wulin.com을 더 지원하기를 바랍니다