代码改变世界

day12作业

2018-07-26 22:59  好好学习哟  阅读(884)  评论(1编辑  收藏  举报

 

抽象类+接口+内部类作业题

 

一、              选择题

 

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代码运行的结果是(D )。(选择一项)

 

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而不产生编译错误的是(CD)。(选择二项)

 

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.

以下选项中关于匿名内部类的说法正确的是(  CD )。(选择二项)

 

 

 

 

A.

匿名内部类可以实现多个接口,或者继承一个父类

 

B.

匿名内部类不能是抽象类,必须实现它的抽象父类或者接口里包含的所有抽象方法

 

C.

匿名内部类没有类名,所以匿名内部类不能定义构造方法

 

D.

匿名内部类可以直接访问外部类的所有局部变量

 

二、              判断题(共20个题目,总计10分)

  1. 声明为final的类不能是超类。( √ )
  2. 使用final修饰的变量将变成常量,其中不能再被改变;使用final修饰的方法将无法被子类重载;使用final修饰的类将无法再被其他类继承。( √   )
  3. 抽象方法不能含有方法体,并且必须定义在抽象类中。( √   )
  4. 抽象类是指在class前加使用abstract关键字修饰,且可以存在抽象方法和普通方法的类。( ×  )
  5. 接口中只有常量,没有变量;只有抽象方法,并且全部都是public方法。( √   )
  6. 抽象类和接口都不能实例化,都没有构造方法。(  × )
  7. 接口并不要求实现类和接口在概念本质上一致的,仅仅是实现了接口定义的约定或者能力而已。接口定义了“做什么”,而实现类负责完成“怎么做”,体现了功能(规范)和实现分离的原则。(  √)
  8. 内部类作为外部类成员,权限修饰符和其他成员一样,可声明为private、默认、protected或public。(  √)
  9. 匿名内部类适合创建那种只需要使用一次的类,它可以实现一个或多个接口,或者继承一个父类。(  × )
  10. 对于物理连接,比如数据库连接、输入流输出流、Socket连接等,垃圾回收机制无能为力,必须手动关闭才可以。( ×  )
  11. 垃圾回收机制回收任何对象之前,总会先调用它gc( )方法,该方法是Object类提供的方法。不要主动调用某个对象的该方法,应该交给垃圾回收机制调用。( × )

 

三、              简答题

  1. final和abstract关键字的作用。

final 1.修饰类,类不能被继承  2.修饰变量,变量就变成了常量,只能被赋值一次   (~final 修饰的变量叫常量;一般会与public static共用)3. 修饰方法,方法不能被重写

abstract修饰类和方法使其成为抽象的,当不知其具体能做什么时就定义为抽象的

  1. 接口和抽象类的联系和区别。

A:成员区别

             * 抽象类(和普通类相比,只是可以多定义了抽象方法而已)

                             * 成员变量:可以变量,也可以常量

                             * 构造方法:有

                             * 成员方法:可以抽象,也可以非抽象

             * 接口:

                             * 成员变量:只可以常量

                             * 构造方法:无

                             * 成员方法:只可以抽象

* B:关系区别

             * 类与类

                             * 继承,单继承,多层继承

             * 类与接口:

                             * 实现,单实现,多实现

             * 接口与接口多继承

                             * 继承,单继承,

* C:设计理念区别

             * 抽象类 被继承体现的是:"is a"的关系.抽象类中定义的是该继承体系的共性功能

             * 接口   被实现体现的是:"like a "的关系.接口中定义的是该继承体系的扩展功能.

  1. 内部类的类型及其特点。

类中的类.

内部类访问特点

    * a:内部类可以直接访问外部类的成员,包括私有。

    * b:外部类要访问内部类的成员,必须创建对象。

             * 外部类名.内部类名 对象名 = 外部类对象.内部类对象;

  1. 介绍Java垃圾回收机制。

 

四、              编码题

  1. 编写程序描述兔子和青蛙

需求说明:使用面向对象的思想,设计自定义类描述兔子和青蛙。

实现思路及关键代码

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

2)         根据共性,定义抽象的动物类

属性:名字、颜色、类别(哺乳类、非哺乳类)

方法:吃饭,发出叫声

3)         根据青蛙会游泳 抽象游泳的接口

方法:游泳

4)         定义兔子继承动物类,青蛙继承动物同时实现游泳接口

程序运行结果如图所示。

 

  1 class TestAnimal {
  2 
  3    public static void main(String[] args) {
  4 
  5                Animal a = new Rabbit("美人","黑色","哺乳类");
  6 
  7                System.out.println("那只" + a.getColor() + "的兔子正在" + a.speak());
  8 
  9               
 10 
 11  
 12 
 13                Animal b = new Frog("大兵","绿色","非哺乳类");
 14 
 15               
 16 
 17  
 18 
 19    }
 20 
 21 }
 22 
 23 /*
 24 
 25 1)           分析兔子和青蛙的共性
 26 
 27 2)           根据共性,定义抽象的动物类
 28 
 29 属性:名字、颜色、类别(哺乳类、非哺乳类)
 30 
 31 方法:吃饭,发出叫声
 32 
 33 3)           根据青蛙会游泳 抽象游泳的接口
 34 
 35 方法:游泳
 36 
 37 4)           定义兔子继承动物类,青蛙继承动物同时实现游泳接口
 38 
 39  
 40 
 41 */
 42 
 43 abstract class Animal {
 44 
 45    private String name;
 46 
 47    private String color;
 48 
 49    private String kind;
 50 
 51   
 52 
 53    public Animal(){}
 54 
 55  
 56 
 57    public Animal(String name,String color,String kind) {
 58 
 59                this.name = name;
 60 
 61                this.color = color;
 62 
 63                this.kind = kind;
 64 
 65    }
 66 
 67  
 68 
 69    public String getName(){
 70 
 71                return name;
 72 
 73    }
 74 
 75  
 76 
 77    public void setName(String name) {
 78 
 79                this.name = name;
 80 
 81    }
 82 
 83  
 84 
 85    public String getColor(){
 86 
 87                return color;
 88 
 89    }
 90 
 91  
 92 
 93    public void setColor(String color) {
 94 
 95                this.color = color;
 96 
 97    }
 98 
 99  
100 
101    public String getKind(){
102 
103                return kind;
104 
105    }
106 
107  
108 
109    public void setKind(String kind) {
110 
111                this.kind = kind;
112 
113    }
114 
115  
116 
117    public abstract void eat();
118 
119   
120 
121    public abstract void speak();
122 
123  
124 
125  
126 
127 }
128 
129  
130 
131 interface Swim {
132 
133    public abstract void swim();
134 
135 }
136 
137  
138 
139 class Rabbit extends Animal {
140 
141   
142 
143    public Rabbit() {
144 
145               
146 
147    }
148 
149  
150 
151    public Rabbit(String name,String color,String kind) {
152 
153                super(name,color,kind);
154 
155    }
156 
157  
158 
159    public void eat() {
160 
161                System.out.println("爱吃胡萝卜");
162 
163    }
164 
165  
166 
167    public void speak() {
168 
169                System.out.println("叽叽");
170 
171    }
172 
173  
174 
175   
176 
177   
178 
179 }
180 
181  
182 
183 class Frog extends Animal implements Swim{
184 
185    public Frog() {
186 
187                super();
188 
189    }
190 
191  
192 
193    public Frog(String name,String color,String kind) {
194 
195                super(name,color,kind);
196 
197    }
198 
199  
200 
201    public void eat() {
202 
203                System.out.println("爱吃昆虫");
204 
205    }
206 
207   
208 
209    public void speak() {
210 
211                System.out.println("呱呱");
212 
213    }
214 
215  
216 
217    public void swim() {
218 
219                System.out.println("虽然不是鱼,但青蛙也是游泳高手");
220 
221    }
222 
223  
224 
225   
226 
227   
228 
229 }

 

2.编写程序描述影视歌三栖艺人

需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人。

实现思路及关键代码

1)         分析影视歌三栖艺人的特性

a)         可以演电影

b)         可以演电视剧

c)         可以唱歌

2)         定义多个接口描述特性

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

b)         演电视剧的接口-----方法:演电视剧

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

3)         定义艺人类实现多个接口

程序运行结果如图2所示。

 

 

 1 package com.zuikc.eclipse;
 2 import com.zuikc.bean.Artist;
 3 
 4 public class TestArtist {
 5     public static void main(String[] args) {
 6         Artist a = new Artist("马素素");
 7         a.show();
 8         a.drama();
 9         a.film();
10         a.sing();    
11     }
12 }
13 package com.zuikc.bean;
14 
15 public interface Film {
16     public abstract void film();
17 }
18 
19 
20 package com.zuikc.bean;
21 
22 public interface Drama {
23     public abstract void drama();
24 }
25 package com.zuikc.bean;
26 
27 public interface Sing {
28     public abstract void sing();
29 }
30 package com.zuikc.bean;
31 
32 public class Artist implements Sing, Film, Drama {
33     String name;
34     
35     public Artist() {
36         super();
37         
38     }
39     
40     public Artist(String name) {
41         this.name = name;
42     }
43     
44     
45 
46     public String getName() {
47         return name;
48     }
49 
50     public void setName(String name) {
51         this.name = name;
52     }
53 
54     @Override
55     public void drama() {
56         System.out.println("我会演电视剧");
57     }
58 
59     @Override
60     public void film() {
61         System.out.println("我会演电影");
62     }
63 
64     @Override
65     public void sing() {
66         System.out.println("我会唱歌");
67     }
68     
69     public void show() {
70         System.out.println("我叫" + this.name);
71     }
72     
73 
74 }

 

 

五、              可选题

  1. 实现不同符合PCI规范的适配器

需求说明:PCI是一种规范,所有实现了该规范的适配器,必如显卡、声卡、网卡都可以安装到PCI插槽上并工作。模拟实现该功能。

 

实现思路及关键代码

1)         定义PCI接口,具有传送数据send()方法

2)         定义显卡VideaCard类,实现该接口

3)         定义声卡AudioCard类,实现PCI接口

4)         定义网卡NetCard类,实现PCI接口

5)         定义测试类,让显卡、声卡、网卡发送数据

 

1 package com.zuikc.eclipse;
 2 
 3 import com.zuikc.bean.AudioCard;
 4 import com.zuikc.bean.NetCard;
 5 import com.zuikc.bean.VideaCard;
 6 
 7 /*实现思路及关键代码
 8 
 9 1)         定义PCI接口,具有传送数据send()方法
10 
11 2)         定义显卡VideaCard类,实现该接口
12 
13 3)         定义声卡AudioCard类,实现PCI接口
14 
15 4)         定义网卡NetCard类,实现PCI接口
16 
17 5)         定义测试类,让显卡、声卡、网卡发送数据*/
18 public class TestPci {
19     public static void main(String[] args) {
20         VideaCard v = new VideaCard();
21         AudioCard a = new AudioCard();
22         NetCard n = new NetCard();
23         v.send();
24         a.send();
25         n.send();
26     }
27 }
28 package com.zuikc.bean;
29 
30 public interface Pci {
31     public abstract void send();
32 }
33 package com.zuikc.bean;
34 
35 public class VideaCard implements Pci {
36 
37     @Override
38     public void send() {
39         System.out.println("显卡发送数据");
40     }
41 
42 }
43 package com.zuikc.bean;
44 
45 public class AudioCard implements Pci {
46 
47     @Override
48     public void send() {
49         System.out.println("声卡发送数据");
50     }
51     
52 
53 }
54 package com.zuikc.bean;
55 
56 public class NetCard implements Pci {
57 
58     @Override
59     public void send() {
60         System.out.println("网卡发送数据");
61     }
62 
63 }

 

2.实现不同引用类型对象的大小比较

需求说明:学生类,新闻类,商品类虽然是完全不同的类,但是都具有比较的能力,比如可以比较两个学生的大小,但需要指定比较的依据是学号、姓名还是成绩等。

实现思路及关键代码:

将比较的能力定义为接口,让学生、新闻、商品类都实现该接口。

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

2)         定义学生类,包括学号、姓名、年龄和分数,实现Comparable接口,按照分数倒序排列;

3)         定义新闻类,包括编号(int类型)、标题、内容和点击数,实现Comparable接口,按照编号正序排列;

4)         定义测试类,分别创建两个学生对象、新闻对象,进行比较并输出结果。

 

  1 package com.zuikc.eclipse;
  2 
  3 import com.zuikc.bean.Paper;
  4 import com.zuikc.bean.Student;
  5 
  6 public class TestComparable {
  7     public static void main(String[] args) {
  8         Student s1 = new Student(1,"小航",12,90);
  9         Student s2 = new Student(2,"小红",13,97);
 10         if(s1.compareTo(s2)>0){            
 11             System.out.println(s2);
 12             System.out.println(s1);
 13         }else{
 14             System.out.println(s1);
 15             System.out.println(s2);
 16         }
 17         
 18         Paper n1 = new Paper(1,"詹姆斯转会","詹姆斯与湖人签约",20000);
 19         Paper n2 = new Paper(2,"高考改革","3+3",10000);
 20         if(n1.compareTo(n2)>0){
 21             System.out.println(n2);
 22             System.out.println(n1);            
 23         }else{
 24             System.out.println(n1);
 25             System.out.println(n2);
 26         }
 27 
 28     }
 29 }
 30 
 31 package com.zuikc.bean;
 32 /*将比较的能力定义为接口,让学生、新闻、商品类都实现该接口。
 33 1)    定义接口Comparable,其中包含唯一的方法int compareTo(Object obj);返回值>0,表示大于,返回值=0,表示等于,返回值<0,表示小于。
 34 2)    定义学生类,包括学号、姓名、年龄和分数,实现Comparable接口,按照分数倒序排列;
 35 3)    定义新闻类,包括编号(int类型)、标题、内容和点击数,实现Comparable接口,按照编号正序排列;
 36 4)    定义测试类,分别创建两个学生对象、新闻对象,进行比较并输出结果。
 37 */
 38 public interface Comparable {
 39     public abstract int compareTo(Object obj);
 40 }
 41 package com.zuikc.bean;
 42 
 43 public class Student implements Comparable {
 44     int id;
 45     String name;
 46     int age;
 47     int score;
 48     
 49     public Student() {
 50         super();
 51         
 52     }
 53     
 54 
 55     public Student(int id, String name, int age, int score) {
 56         super();
 57         this.id = id;
 58         this.name = name;
 59         this.age = age;
 60         this.score = score;
 61     }
 62     
 63     
 64 
 65 
 66     public int getId() {
 67         return id;
 68     }
 69 
 70 
 71     public void setId(int id) {
 72         this.id = id;
 73     }
 74 
 75 
 76     public String getName() {
 77         return name;
 78     }
 79 
 80 
 81     public void setName(String name) {
 82         this.name = name;
 83     }
 84 
 85 
 86     public int getAge() {
 87         return age;
 88     }
 89 
 90 
 91     public void setAge(int age) {
 92         this.age = age;
 93     }
 94 
 95 
 96     public int getScore() {
 97         return score;
 98     }
 99 
100 
101     public void setScore(int score) {
102         this.score = score;
103     }
104 
105 
106     @Override
107     public int compareTo(Object obj) {
108         Student other = (Student)obj;
109         if (this.score > other.score){
110             return 1;
111         }else if (this.score < other.score){
112             return -1;
113         }
114         else{
115             return 0;
116         }
117         
118     }
119 
120 
121     @Override
122     public String toString() {
123         return "Student [id=" + id + ", name=" + name + ", age=" + age + ", score=" + score + "]";
124     }
125     
126 
127 }
128 package com.zuikc.bean;
129 
130 public class Paper implements Comparable {
131     int nid;
132     String title;
133     String news;
134     int lick;
135 
136     public Paper() {
137         super();
138     }
139     
140     public Paper(int nid, String title, String news, int lick) {
141         super();
142         this.nid = nid;
143         this.title = title;
144         this.news = news;
145         this.lick = lick;
146     }
147     
148     
149     public int getNid() {
150         return nid;
151     }
152 
153     public void setNid(int nid) {
154         this.nid = nid;
155     }
156 
157     public String getTitle() {
158         return title;
159     }
160 
161     public void setTitle(String title) {
162         this.title = title;
163     }
164 
165     public String getNews() {
166         return news;
167     }
168 
169     public void setNews(String news) {
170         this.news = news;
171     }
172 
173     public int getLick() {
174         return lick;
175     }
176 
177     public void setLick(int lick) {
178         this.lick = lick;
179     }
180 
181     @Override
182     public int compareTo(Object obj) {
183         Paper other = (Paper)obj;
184         return this.nid - other.nid;
185     }
186 
187     @Override
188     public String toString() {
189         return "Paper [nid=" + nid + ", title=" + title + ", news=" + news + ", lick=" + lick + "]";
190     }
191 
192 }