JavaSE習題 繼承接口和泛型
問答題:
1.子類在什麽情況下可以繼承父類友好成員?
答:在同一個包內
2.子類通過怎樣的方法可以隱藏繼承的成員變量?
答:聲明一個與父類相同變量名的成員變量
3.子類重寫繼承的方法原則是什麽?
答:保證方法的名字,類型,參數個數,類型同父類完全相同
4.子類的構造方法第一條語句是什麽?
答:super(),如果不寫,編譯器也會自動調用
5.子類對象一單重寫了繼承的方法,就會隱藏繼承的方法,對嗎?
答:對
6.子類重寫繼承方法時,可以降低方法的訪問權限嘛?
答:不可以,只可以增加權限
7.簡述super關鍵字用法
答:super關鍵字是一個引用超類的對象
8.假設父類有個方法
public double f(double x,double y){
return x+y;
}
是否允許子類再次聲明下面方法
public float f(double x,double y){
return 23;
}
答:允許,該overwrite就隱藏了父類的方法
9.父類的final方法可以被子類重寫嘛
答:不可以
10.什麽類可以有抽象方法?
答:抽象類
11.什麽叫對象的上轉型對象?
答:子類對象引用放入父類的聲明
12.什麽叫接口回調?
答:子類接口引用調入父類接口聲明
13.與類有關的匿名類一定是該類的一個子類嗎?與接口有關的匿名類一定是實現接口的子類嗎?
答:一定是,一定是
14.怎樣聲明一個泛型類?怎樣評價SDK1.5新出的泛型?
答:使用尖括號,對未來的實際開發有了很大改善吧
15閱讀下列程序,寫出下列程序的結果。
程序在書本上
答:最大公約數:6
最小公倍數:36
最大公約數:方法的參數值不是正整數
16下列程序中,錯誤代碼是哪一個?
答:在classA中,getFloat方法是友好型,所以B繼承A類後,getFloat方法只能擴大權限,不能縮小為private類型
作業題
1.編寫一個類,該類中有如下方法;
public int f(int a,int b){
}//要求找出ab的最大公約數
編寫一個該類子類,要求子類重寫方法f(),而且重寫的方法將返回兩個整數的最小公倍數
要求:在重寫方法的方法體中首先調用被隱藏的方法返回ab的最大公約數m,然後將(a*b)/m的值返回,在應用的程序的主類中分別用父類和子類創建對象,並分別調用方法f()計算兩個正整數的最大公約數和最小公倍數
public class Demo03 { public static void main(String[] args) { System.out.println(new Function().f(12, 18)); System.out.println(new SonFunction().f(12, 18)); } } class Function{ public int f(int a,int b) { if(a>b) { int temp=a; a=b; b=temp; } int fin = 0; for(int i=1;i<=a;i++) { if(a%i==0&&b%i==0) { fin=i; } } return fin; } } class SonFunction extends Function{ @Override public int f(int a, int b) { int m=super.f(a, b); return (a*b)/m; } }
2.編寫一個抽象類,該類有3個抽象方法
public abstract void f(int x);
public abstract void g(int x,int y);
public abstract double h(double x);
然後分別給出這個抽象類的3個子類
要求,在應用程序的主類中創建子類對象,再向上轉型對象調用方法f,g,h
public class Demo03 { public static void main(String[] args) { A a=new C(); a.f(1); a.g(1, 1); a.h(1); } } interface A{ public abstract void f(int x); public abstract void g(int x,int y); public abstract double h(double x); } class C implements A{ @Override public void f(int x) { System.out.println("This is f()"); } @Override public void g(int x, int y) { System.out.println("This is g"); } @Override public double h(double x) { System.out.println("This is h"); return 0; } }
4.舉例說明匿名類的用法
直接new出來,不需要後續的調用的時候可以這樣
5.編寫一個異常類,並寫出一個產生異常的方法,在應用程序中測試異常
public class Demo04 { public static void main(String[] args) { String a="嚶嚶嚶\n"; String b="嚶嚶嚶\n"; String c="我就不嚶嚶嚶\n"; try { new RetalkTest().ReTalk(b, c); new RetalkTest().ReTalk(a, b); } catch (RetalkException e) { e.printStackTrace(); } } } class RetalkException extends Exception{ String message=""; public RetalkException(){ message="復讀機異常\n"; } @Override public String toString() { return message; } } class RetalkTest{ public void ReTalk(String a,String b) throws RetalkException { System.out.println(a+b); if(a.equals(b)) { throw new RetalkException(); } else { System.out.println("還好沒有復讀\n"); } } }
JavaSE習題 繼承接口和泛型