java實驗4
實驗名稱 第四次實驗:修飾符與繼承性
一、實驗目的:
瞭解如何使用類及其成員的修飾符,理解類的繼承性,掌握方法的繼承、過載和覆蓋。
二、實驗要求
1. 編寫如何使用類及其成員的修飾符的程式。
2. 編寫如何通過傳遞引數來呼叫方法的程式。
3. 編寫體現類的繼承性(成員變數、成員方法的繼承)的程式。
三、實驗內容:
(一)使用修飾符
有時需要公開一些變數和方法,有時需要禁止其他物件使用變數和方法,這時可以使用修飾符來實現這個目 的。常用的修飾符有:public,private,protected,package,static,final,abstract等。
1. 程式功能:通過兩個類 StaticDemo、
2. 編寫源程式 KY4_1.java,程式原始碼如下。
class StaticDemo {
static int x;
int y;
public static int getX() {
return x;
}
public static void setX(int newX) {
x = newX;
}
public int getY() {
return y;
}
public void setY(int newY) {
y = newY;
}
}
public class KY4_1 {
public static void main(String[] args) {
System.out.println("類變數x="+StaticDemo.getX());
System.out.println("物件變數y="+StaticDemo.getY());
StaticDemo a= new StaticDemo();
StaticDemo b= new StaticDemo();
a.setX(1);
a.setY(2);
b.setX(3);
b.setY(4);
System.out.println("類變數a.x="+a.getX());
System.out.println("物件變數a.y="+a.getY());
System.out.println("類變數b.x="+b.getX());
System.out.println("物件變數b.y="+b.getY());
}
}
3. 編譯並執行程式 KY4_1.java,看看該程式是否有錯?如果有錯請在實驗報告中指出出錯的地方,出錯的原因,並給出修改意見以及程式正確執行的結果。
該程式有出錯。
class StaticDemo {
static int x;
int y;
public static int getX() {
return x;
}
public static void setX(int newX) {
x = newX;
}
public int getY() {
return y;
}
public void setY(int newY) {
y = newY;
}
}
public class KY4_1 {
public static void main(String[] args) {
StaticDemo kk=new StaticDemo();
System.out.println("類變數x="+StaticDemo.getX());
System.out.println("物件變數y="+kk.getY());
StaticDemo a= new StaticDemo();
StaticDemo b= new StaticDemo();
a.setX(1);
a.setY(2);
b.setX(3);
b.setY(4);
System.out.println("類變數a.x="+a.getX());
System.out.println("物件變數a.y="+a.getY());
System.out.println("類變數b.x="+b.getX());
System.out.println("物件變數b.y="+b.getY());
}
}
(二)方法中引數傳遞的練習
1. 編寫一個程式檔案KY4_2.java。
2. 程式功能如下:有一個主方法main() 以及一個求平方和的方法int square(int x, int y)。square方法計算引數x 和y的平方和,並返回該平方和值。在主方法main中定義兩個整型變數,並給它們賦一個初值,然後使用這兩個變數作為實際引數來呼叫square方法,求出平方和,最後輸出平方和。
3. 請將程式KY4_2.java的原始碼寫在實驗報告中。
public class KY4_2 {
int square(int x,int y){
int square;
square=x*x+y*y;
return square;
}
public static void main(String[] args) {
KY4_2 k=new KY4_2();
int a=1,b=2,c;
c=k.square(a, b);
System.out.println(c);
}
}
(三)類的繼承性練習
1. 進一步理解繼承的含義
新類可從現有的類中產生,並保留現有類的成員變數和方法並可根據需要對它們加以修改。新類 還可新增新的變數和方法。這種現象就稱為類的繼承。
當建立一個新類時,不必寫出全部成員變數和成員方法。只要簡單地宣告這個類是從一個已定義的類繼承下來的,就可以引用被繼承類的全部成員。被繼承的類稱為父類或超類(superclass),這個新類稱為子類。
Java 提供了一個龐大的類庫讓開發人員繼承和使用。設計這些類是出於公用的目的,因此,很少有某個類恰恰滿足你的需要。你必須設計自己的能處理實際問題的類,如果你設計的這個類僅僅實現了繼承,則和父類毫無兩樣。所以,通常要對子類進行擴充套件,即新增新的屬性和方法。這使得子類要比父類大,但更具特殊性,代表著一組更具體的物件。繼承的意義就在於此。
2.編寫兩個程式檔案KY4_3.java和KY4_4.java,實現類的繼承。
3.KY4_3.java的程式碼如下:
public class KY4_3
{
protected String xm; //姓名
protected int xh; //學號
void setdata(String m,int h) //該方法為姓名和學號賦初始值
{
xm =m;
xh = h;
}
public void print() //輸出學生的姓名和學號
{
System.out.println(xm+", "+xh);
}
}
4.編譯 KY4_3.java,產生類檔案 KY4_3.class。注意:暫時不執行程式KY4_3.class。
5.編寫一個程式檔案KY4_4.java。程式功能如下:子類KY4_4繼承父類 KY4_3,其不僅具有父類的成員變數 xm(姓名)、xh(學號),還定義了新的成員變數 xy(學院)、xi(系)。在子類KY4_4中重寫了父類的方法print(),在該方法中不僅輸出學生的姓名和學號,而且還輸出學生的學院和系。另外,在子類KY4_4中還定義了一個主方法main。首先,在主方法中建立一個父類 KY4_3的物件f,設定f的姓名為"帥零",學號為"12321",並且呼叫print()方法輸出物件f的姓名和學號。接著,在主方法中建立一個子類 KY4_4的物件s,設定s的姓名為"郭娜",學號為"12345",學院為"經濟管理學院",係為"資訊管理系",並且呼叫print()方法輸出物件s的姓名,學號,學院和系。
6.編譯並執行程式KY4_4.java。請將KY4_4的源程式以及執行結果寫在實驗報告中。
注意:父類 KY4_3 與子類 KY4_4要在同一資料夾(路徑)內。
public class KY4_4 extends KY4_3 {
protected String xy;
protected String xi;
public void print(){
System.out.println(xm);
System.out.println(xh);
System.out.println(xy);
System.out.println(xi);
}
public static void main(String[] args) {
KY4_3 f=new KY4_3();
f.setdata("帥零",12321);
f.print();
KY4_4 s=new KY4_4();
s.setdata("郭娜", 12345);
s.xy="經濟管理學院";
s.xi="資訊管理系";
s.print();
}
}
四、思考題
1. 說明類的繼承和多型都有什麼作用?
繼承就是子類繼承父類,使子類具有父類的各種屬性和方法,好處就是避免多餘的程式碼出現.多型就是一個介面,使用不同的例項去執行不同的操作,好處就是增強程式的可擴充套件性及可維護性.
四、心得體會:
通過本次實驗,明白了繼承與多型的作用以及該注意事項,更清晰的瞭解到了繼承與多型的使用.