繼承:在Java中使用extends關鍵字來實現類的繼承 ?,extends意思就是派生,所以子類也叫派生類,繼承的主要目的是擴展類的內容
操作格式: class A{}; class B extends A{};
子類B可以繼承父類A中的公用方法,也可以擴展自己的方法
示例代碼:
package OOP2;
class Person{
private String name;
private int age;
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
};
class Student extends Person{
private String school;
public void setSchool(String school){
this.school = school;
}
public String getSchool(){
return this.school;
}
};
public class extendsOne {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student stu = new Student();
stu.setName("李帥");
stu.setAge(20);
stu.setSchool("霍格沃茨");
System.out.println("名字:"+stu.getName()+","+"年齡"+stu.getAge()+","+"學校:"+stu.getSchool());
}
}
繼承的限制:Java中只允許單繼承,意思就是一個子類只能繼承一個父類,一個孩子只能有一個親爸
但是可以進行多層繼承,意思就是父類還可以有父類
訪問限制:在父類中的私有成員不能被子類訪問,所以通過setter 和getter方法供子類訪問父類中的非私有方法。
在Java機制中,首先執行父類中的內容,再執行子類中的內容,即沒有父親就沒有孩子,對于子類的構造方法中,隱含了super();,所以有時也將父類稱為超類。
方法的覆寫:在繼承的關系中也存在方法的覆寫,即子類中覆寫父類中的方法。但是被子類覆寫的方法不能擁有比父類更低的訪問權限。 目前接觸的權限有:private
如果子類中的方法權限實在低于父類中的權限,只能通過super的方法來實現,實例如下:
class Person{// 定義父類
void print(){// 默認的訪問權限
System.out.println("Person --> void print()。") ;
}
};
class Student extends Person{// 定義繼承關系
public void print(){
super.print() ;// 訪問父類中被子類覆寫過的方法
System.out.println("Student --> void print()。") ;
}
};
public class OverrideDemo03{
public static void main(String args[]){
Student s = new Student() ;
s.print() ;
}
};
研究此問題意義不大。
方法重載和覆寫的區別:
super關鍵字
super關鍵字的作用是在子類中調用父類的指定操作,例如:調用屬性、方法、構造等。
但在子類中要調用父類的有參構造,必須要聲明參數,super(參數,參數)
繼承的應用:
實例:定義一個整形數組類,要求包含構造方法,增加數據及輸出數據成員方法,并利用數組實現動態內存分配,在此基礎上定義出以下子類:
A:排序類,實現數組的排序
B:數組反轉類,實現數據的反向存放
代碼:
class Array{// 表示數組
private int temp[] ;// 整型數組
private int foot ;// 定義添加位置
public Array(int len){
if(len>0){
this.temp = new int[len] ;
}else{
this.temp = new int[1] ;// 最少維持空間是1個
}
}
public boolean add(int i){// 增加元素
if(this.foot
this.temp[foot] = i ;// 增加元素
this.foot ++ ;// 修改腳標
return true ;
}else{
return false ;
}
}
public int[] getArray(){
return this.temp ;
}
};
class SortArray extends Array{// 排序類
public SortArray(int len){
super(len) ;
}
public int[] getArray(){// 覆寫方法
java.util.Arrays.sort(super.getArray()) ;// 排序操作
return super.getArray() ;
}
};
class ReverseArray extends Array{// 反轉操作類
public ReverseArray(int len){
super(len) ;
}
public int[] getArray() {
int t[] = new int[super.getArray().length] ;// 開辟一個新的數組
int count = t.length - 1 ;
for(int x=0 ;x
t[count] = super.getArray()[x] ;// 數組反轉
count-- ;
}
return t ;
}
};
public class ArrayDemo{
public static void main(String args[]){
// ReverseArray a = null ;// 聲明反轉類對象
// a = new ReverseArray(5) ;// 開辟5個空間大小
SortArray a = null ;
a = new SortArray(5) ;
System.out.print(a.add(23) + "\t") ;
System.out.print(a.add(21) + "\t") ;
System.out.print(a.add(2) + "\t") ;
System.out.print(a.add(42) + "\t") ;
System.out.print(a.add(5) + "\t") ;
System.out.print(a.add(6) + "\t") ;
print(a.getArray()) ;
}
public static void print(int i[]){// 輸出數組內容
for(int x=0;x
System.out.print(i[x] + "、") ;
}
}
};