1. 程式人生 > >JavaSE習題 繼承接口和泛型

JavaSE習題 繼承接口和泛型

調用方法 就會 異常類 關鍵字 圖片 per abstract div temp

問答題:

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習題 繼承接口和泛型