Java抽象類接口、內部類題庫


一、    選擇題

 

1.

Person類和Test類的代碼如下所示,則代碼中的錯誤語句是(  C  。(選擇一項)

 

public class Person {

         public String name;

         public Person(String name) {

                   this.name = name;

         }

}

public class Test {

    public static void main(String[] args) {

        final Person person = new Person("歐歐");

        person.name = "美美";

        person = new Person("亞亞");

    }

}

 

 

 

 

A.

final Person person = new Person("歐歐");

 

B.

person.name = "美美";

 

C.

person = new Person("亞亞");

 

D.

沒有錯誤

 

2.

如下Java代碼運行的結果是(  B  )。(選擇一項)

 

public class Test {

         final int age;

         public Test(){

                   age=10;

         }

         public static void main(String[ ] args) {

                   System.out.println(new Test().age);

         }

}

 

 

 

 

A

輸出:0

 

B.

輸出:10

 

C.

輸出:null

 

D.

運行時出現異常

 

 

3.

以下代碼中錯誤的語句是(   D  )。(選擇一項)

 

public class Something{

         public static void main(String[] args){

                   final Other o=new Other();

                   new Something().addOne(o);//1

         }

         public void addOne( Other o){

                   o.i++;//2

                   o =  new Other();//3

         }

}

class Other{

         public int i;

}

 

 

 

 

A

1

 

B.

2

 

C.

3

 

D.

沒有錯誤

 

4.

下列選項中,關於Java的抽象類和抽象方法說法正確的是(  AC  )。(選擇二項)

 

 

 

 

A

抽象類中可以含有0個或多個抽象方法

 

B.

抽象類中不可以有構造方法

 

C.

一個類中若有抽象方法,則這個類必為抽象類

 

D.

子類必須重寫父類所有的抽象方法

 

5.

Java中關於abstract關鍵字,以下說法正確的是(  AB  )。(選擇兩項)

 

 

 

 

A

abstract類中可以沒有抽象方法

 

B.

abstract類的子類也可以是抽象類

 

C.

abstract方法可以有方法體

 

D.

abstract類可以創建對象

 

6.

以下選項可替換題目中//add code here而不產生編譯錯誤的是(  AD  )。(選擇二項)

 

public abstract class MyClass{

         public int constInt=5;

         //add code here

         public void method( ){

         }

}

 

 

 

 

A

public abstract void method(int a);

 

B.

constInt =constInt+5;

 

C.

public int method( );

 

D.

public abstract void anotherMethod( );

 

7.

Java接口中,下列選項中屬於有效的方法聲明是(  AC  )。(選擇二項)

 

 

 

 

A

public void aMethod( );

 

B.

final void aMethod( );

 

C.

void aMethod(){ }

 

D.

private void aMethod( );

 

8.

以下選項中關於匿名內部類的說法正確的是(  BC   )。(選擇二項)

 

 

 

 

A.

匿名內部類可以實現多個接口,或者繼承一個父類

 

B.

匿名內部類不能是抽象類,必須實現它的抽象父類或者接口里包含的所有抽象方法

 

C.

匿名內部類沒有類名,所以匿名內部類不能定義構造方法

 

D.

匿名內部類可以直接訪問外部類的所有局部變量

二、    判斷題(共20個題目,總計10分)

  1. 聲明為final的類不能是超類。(  T  )
  2. 使用final修飾的變量將變成常量,其中不能再被改變;使用final修飾的方法將無法被子類重載;使用final修飾的類將無法再被其他類繼承。(  T  )
  3. 抽象方法不能含有方法體,並且必須定義在抽象類中。(  F  )
  4. 抽象類是指在class前加使用abstract關鍵字修飾,且可以存在抽象方法和普通方法的類。(  T  )
  5. 接口中只有常量,沒有變量;只有抽象方法,並且全部都是public方法。(  T  )
  6. 抽象類和接口都不能實例化,都沒有構造方法。(  F  )
  7. 接口並不要求實現類和接口在概念本質上一致的,僅僅是實現了接口定義的約定或者能力而已。接口定義了“做什么”,而實現類負責完成“怎么做”,體現了功能(規范)和實現分離的原則。(  T  )
  8. 內部類作為外部類成員,權限修飾符和其他成員一樣,可聲明為private、默認、protected或public。(  T  )
  9. 匿名內部類適合創建那種只需要使用一次的類,它可以實現一個或多個接口,或者繼承一個父類。(  F  )
  10. 對於物理連接,比如數據庫連接、輸入流輸出流、Socket連接等,垃圾回收機制無能為力,必須手動關閉才可以。(  T  )
  11. 垃圾回收機制回收任何對象之前,總會先調用它gc( )方法,該方法是Object類提供的方法。不要主動調用某個對象的該方法,應該交給垃圾回收機制調用。(  F  )

三、    簡答題

  1. final和abstract關鍵字的作用。
  2. 接口和抽象類的聯系和區別。
  3. 內部類的類型及其特點。

四、    編碼題

1.編寫程序描述兔子和青蛙

需求說明:使用面向對象的思想,設計自定義類描述兔子和青蛙。

實現思路及關鍵代碼

1)         分析兔子和青蛙的共性

2)         根據共性,定義抽象的動物類

屬性:名字、顏色、類別(哺乳類、非哺乳類)

方法:吃飯,發出叫聲

3)         根據青蛙會游泳 抽象游泳的接口

方法:游泳

4)         定義兔子繼承動物類,青蛙繼承動物同時實現游泳接口

程序運行結果如圖所示。

 1 /**
 2  *  3  * 動物類  4  *  5  * @author Administrator  6  *  7  */
 8 public abstract class Animal  9 {  10     private String name;//名字
 11     private String color;//顏色
 12     private String type;//類別(哺乳類、非哺乳類) 
 13     public Animal()  14  {  15         super();  16  }  17     public Animal(String name, String color, String type)  18  {  19         super();  20         this.name = name;  21         this.color = color;  22         this.type = type;  23  }  24     public String getName()  25  {  26         return name;  27  }  28     public void setName(String name)  29  {  30         this.name = name;  31  }  32     public String getColor()  33  {  34         return color;  35  }  36     public void setColor(String color)  37  {  38         this.color = color;  39  }  40     public String getType()  41  {  42         return type;  43  }  44     public void setType(String type)  45  {  46         this.type = type;  47  }  48     /**
 49  *  50  * 發出叫聲  51  *  52      */
 53     public abstract void shout();  54     /**
 55  *  56  * 吃飯  57  *  58      */
 59     public abstract void eat();  60 }  61 /**
 62  *  63  * 游泳接口  64  *  65  * @author Administrator  66  *  67  */
 68 public interface Swimmable  69 {  70     /**
 71  *  72  * 游泳  73  *  74      */
 75     public void swim();  76 }  77 public class Frog extends Animal implements Swimmable  78 {  79     public Frog()  80  {  81         super();  82  }  83     public Frog(String name, String color, String type)  84  {  85         super(name, color, type);  86  }  87  @Override  88     public void shout()  89  {  90         System.out.println("那只" + super.getColor()  91                 + "的,名字叫" + super.getName() + "的青蛙正在呱呱的叫");  92  }  93  @Override  94     public void eat()  95  {  96         System.out.println("青蛙是" + super.getType() + ",愛吃昆蟲");  97  }  98  @Override  99     public void swim() 100  { 101         System.out.println("雖然不是魚,但是青蛙也是游泳高手"); 102  } 103 } 104 public class Rabbit extends Animal 105 { 106     public Rabbit() 107  { 108         super(); 109  } 110     public Rabbit(String name, String color, String type) 111  { 112         super(name, color, type); 113  } 114  @Override 115     public void shout() 116  { 117         System.out.println("那只" + super.getColor() 118                 + "的,名字叫" + super.getName() + "的兔子正在嘰嘰的叫"); 119  } 120  @Override 121     public void eat() 122  { 123         System.out.println("兔子是" + super.getType() + ",愛吃胡蘿卜"); 124  } 125 } 126 public class Test 127 { 128     public static void main(String[] args) 129  { 130         Animal rabbit = new Rabbit("美人", "黑色", "哺乳類"); 131  rabbit.shout(); 132  rabbit.eat(); 133         System.out.println("===================="); 134         Animal frog = new Frog("大兵", "綠色", "非哺乳類"); 135  frog.shout(); 136  frog.eat(); 137         Swimmable swimer = (Swimmable) frog; 138  swimer.swim(); 139  } 140 }

2.編寫程序描述影視歌三棲藝人

需求說明:請使用面向對象的思想,設計自定義類,描述影視歌三梄藝人。

實現思路及關鍵代碼

1)         分析影視歌三棲藝人的特性

a)         可以演電影

b)         可以演電視劇

c)         可以唱歌

2)         定義多個接口描述特性

a)         演電影的接口-----方法:演電影

b)         演電視劇的接口-----方法:演電視劇

c)         唱歌的接口-----方法:唱歌

3)         定義藝人類實現多個接口

程序運行結果如圖2所示。

 1 /**
 2  *  3  * 可演電影接口  4  *  5  * @author Administrator  6  *  7  */
 8 public interface Filmable  9 { 10     /**
11  * 12  * 演電影 13  * 14      */
15     public void actFilm(); 16 } 17 /**
18  * 19  * 會唱歌接口 20  * 21  * @author Administrator 22  * 23  */
24 public interface Singable 25 { 26     /**
27  * 28  * 唱歌 29  * 30      */
31     public void sing(); 32 } 33 /**
34  * 35  * 會演電視劇接口 36  * 37  * @author Administrator 38  * 39  */
40 public interface TVable 41 { 42     /**
43  * 44  * 演電視劇 45  * 46      */
47     public void showTV(); 48 } 49 public class Star implements Filmable, TVable, Singable 50 { 51     private String name;//姓名
52     public Star() 53  { 54         super(); 55  } 56     public Star(String name) 57  { 58         super(); 59         this.name = name; 60  } 61     public String getName() 62  { 63         return name; 64  } 65     public void setName(String name) 66  { 67         this.name = name; 68  } 69  @Override 70     public void sing() 71  { 72         System.out.println("我會唱歌"); 73  } 74  @Override 75     public void showTV() 76  { 77         System.out.println("我能演電視劇"); 78  } 79  @Override 80     public void actFilm() 81  { 82         System.out.println("我能演電影"); 83  } 84     public void introduce() 85  { 86         System.out.println("大家好,我是" + name); 87  } 88 } 89 public class Test 90 { 91     public static void main(String[] args) 92  { 93         Star star = new Star("馬素素"); 94  star.introduce(); 95  star.actFilm(); 96  star.showTV(); 97  star.sing(); 98  } 99 }

 3.寫一個方法對任意引用數據類型數組進行排序。具體要求如下:

1)        方法聲明為public  void sortArr(Object arr[]){  }

2)        方法中首先輸出排序前數組內容,然后進行排序,最后輸出排序后數組內容。

3)        可以是冒泡排序或其他算法實現,不直接調用Java提供的方法實現排序。

思路:任意類實現Comparable接口來實現該引用數據類型的元素排序,在sort()方法中將Object強轉成Comparable實現兩個對象的比較。

 1 public void sort(Object[] arr)  2 {  3     //輸出排序前數組
 4     for (int i = 0; i < arr.length; i++)  5  {  6  System.out.println(arr[i]);  7  }  8     //大循環,一共n個元素,達到最終有序,至多n-1趟比較
 9  Object temp; 10     for (int i = 0; i < arr.length - 1; i++) 11  { 12         //定義一個符號量
13         boolean flag = true;//沒有交換,有序 14         //小循環 
15         for (int j = 0; j < arr.length - 1 - i; j++) 16  { 17             //如果前一個大於后一個 
18             Comparables c1 = (Comparables) arr[j]; 19             Comparables c2 = (Comparables) arr[j + 1]; 20             if (c1.compareTo(c2) > 0) 21  { 22                 //交換 
23                 temp = arr[j]; 24                 arr[j] = arr[j + 1]; 25                 arr[j + 1] = temp; 26                 //修改符號量
27                 flag = false;//交換過,無序
28  } 29  } 30         //判斷經過此趟循環后是否已經有序
31         if (flag) 32  { 33             break;//退出外層循環,省略后續趟循環
34  } 35  } 36     //輸出排序后數組
37     for (int i = 0; i < arr.length; i++) 38  { 39  System.out.println(arr[i]); 40  } 41 }

五、    可選題

1.實現不同符合PCI規范的適配器

需求說明:PCI是一種規范,所有實現了該規范的適配器,必如顯卡、聲卡、網卡都可以安裝到PCI插槽上並工作。模擬實現該功能。 

實現思路及關鍵代碼

1)         定義PCI接口,具有傳送數據send()方法

2)         定義顯卡VideaCard類,實現該接口

3)         定義聲卡AudioCard類,實現PCI接口

4)         定義網卡NetCard類,實現PCI接口

5)         定義測試類,讓顯卡、聲卡、網卡發送數據

 

 1 class a  2 {  3     /**
 4  *  5  * PCI接口  6  *  7  * @author Administrator  8  *  9  * 10  * 11      */
12     public interface PCI 13  { 14         /**
15  * 16  * 傳輸數據 17  * 18          */
19         public void send(); 20  } 21     public class VideoCard implements PCI 22  { 23  @Override 24         public void send() 25  { 26             System.out.println("使用PCI接口傳輸視頻數據"); 27  } 28  } 29     public class SoundCard implements PCI 30  { 31  @Override 32         public void send() 33  { 34             System.out.println("使用PCI接口傳輸聲音數據"); 35  } 36  } 37     public class NetCard implements PCI 38  { 39  @Override 40         public void send() 41  { 42             System.out.println("使用PCI接口傳輸網絡數據"); 43  } 44  } 45     public class Test 46  { 47         public static void main(String[] args) 48  { 49             PCI p1 = new VideoCard(); 50  p1.send(); 51             PCI p2 = new SoundCard(); 52  p2.send(); 53             PCI p3 = new NetCard(); 54  p3.send(); 55  } 56  } 57 }

 2.實現不同引用類型對象的大小比較

需求說明:學生類,新聞類,商品類雖然是完全不同的類,但是都具有比較的能力,比如可以比較兩個學生的大小,但需要指定比較的依據是學號、姓名還是成績等。

實現思路及關鍵代碼:

將比較的能力定義為接口,讓學生、新聞、商品類都實現該接口。

1)         定義接口Comparable,其中包含唯一的方法int compareTo(Object obj);返回值>0,表示大於,返回值=0,表示等於,返回值<0,表示小於。

2)         定義學生類,包括學號、姓名、年齡和分數,實現Comparable接口,按照分數倒序排列;

3)         定義新聞類,包括編號(int類型)、標題、內容和點擊數,實現Comparable接口,按照編號正序排列;

4)         定義測試類,分別創建兩個學生對象、新聞對象,進行比較並輸出結果。

 

 1 /**
 2  *  3  * 比較接口  4  *  5  * @author Administrator  6  *  7  *  8  *  9  */
 10 public interface Comparable  11 {  12     /**
 13  *  14  * 比較  15  *  16  * @param obj 另外一個對象  17  *  18  * @return 比較的結果 >0 大於 =0 等於 <0 小於  19  *  20      */
 21     public int compareTo(Object obj);  22 }  23 public class News implements Comparable  24 {  25     private int nid;//編號
 26     private String title; //標題
 27     private String contents;//內容
 28     private String type;//新聞類別
 29     public News()  30  {  31         super();  32  }  33     public News(int nid, String title, String contents, String type)  34  {  35         super();  36         this.nid = nid;  37         this.title = title;  38         this.contents = contents;  39         this.type = type;  40  }  41     /**
 42  *  43  * 按照新聞編號正序排列  44  *  45      */
 46     public int compareTo(Object obj)  47  {  48         News other = (News) obj;  49         return this.nid - other.nid;  50  }  51  @Override  52     public String toString()  53  {  54         return "News [nid=" + nid + ", title=" + title + ", contents="
 55                 + contents + ", type=" + type + "]";  56  }  57 }  58 public class Student implements Comparable  59 {  60     private int id;  61     private String name;  62     private int age;  63     private double score;  64     public Student()  65  {  66         super();  67  }  68     public Student(int id, String name, int age, double score)  69  {  70         super();  71         this.id = id;  72         this.name = name;  73         this.age = age;  74         this.score = score;  75  }  76     /**
 77  *  78  * 按照學生成績降序排序  79  *  80      */
 81     public int compareTo(Object obj)  82  {  83         Student other = (Student) obj;  84         if (this.score > other.score)  85  {  86             return -1;  87         } else if (this.score < other.score)  88  {  89             return 1;  90         } else
 91  {  92             return 0;  93  }  94  }  95  @Override  96     public String toString()  97  {  98         return "Student [id=" + id + ", name=" + name + ", age=" + age  99                 + ", score=" + score + "]"; 100  } 101 } 102 public class Test 103 { 104     public static void main(String[] args) 105  { 106         // 107         Student stu1 = new Student(11, "小紅", 18, 97d); 108         Student stu2 = new Student(12, "小東", 20, 98d); 109         if (stu1.compareTo(stu2) > 0) 110  { 111  System.out.println(stu2); 112  System.out.println(stu1); 113         } else
114  { 115  System.out.println(stu1); 116  System.out.println(stu2); 117  } 118         // 119         News news1 = new News(33, "恆大亞冠", "恆大亞冠小組被淘汰", "體育"); 120         News news2 = new News(44, "上海尚學堂", "請原諒我的姍姍來遲", "IT"); 121         if (news1.compareTo(news2) > 0) 122  { 123  System.out.println(news2); 124  System.out.println(news1); 125         } else
126  { 127  System.out.println(news1); 128  System.out.println(news2); 129  } 130  } 131 }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM