Java抽象类接口、内部类题库_编写程序描述兔子和青蛙。分析兔子和青蛙的共性-程序员宅基地

技术标签: JavaSE  题库  

一、    选择题

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. }

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mzd8341/article/details/76164960

智能推荐

计算两个经纬度点之间的距离_getdistance求经纬度之间的距离-程序员宅基地

文章浏览阅读1.2k次。计算经纬度点之间距离的算法 getDistance(lat1, lng1, lat2, lng2) { const radLat1 = lat1 * Math.PI / 180.0; const radLat2 = lat2 * Math.PI / 180.0; const a = radLat1 - radLat2; con..._getdistance求经纬度之间的距离

Unity + Grpc + protobuf + C# 使用流程详解_unity grpc-程序员宅基地

文章浏览阅读3.7k次,点赞11次,收藏30次。最近公司的一个unity项目要把通信方式从Photon替换成grpc,正好系统学一下grpc,以下是我的学习心得。本篇博客系统详细地介绍了unity使用grpc通信的全部要点,希望可以帮助到大家。奥利给!详解目录一、本篇博客知识点简介二、资源及工具的下载地址1、protocolBuffer各个版本2、GRPC3、grpc_unity_package.2.27.0-dev4、.NET Core SDK 2.1及以上三、C#使用Grpc方法流程1、新建项目2、定义服务3、使用GRPC.Tools自动生成.c_unity grpc

Keil出现无法生成.hex文件,经检查,发现是MULTIPLE PUBLIC DEFINITIONS。_keil生成不了hex文件的原因multilple-程序员宅基地

文章浏览阅读1.3w次,点赞4次,收藏6次。Keil出现无法生成.hex文件,经检查,发现是MULTIPLE PUBLIC DEFINITIONS。 实际并不应该出现这种问题。 回顾新建项目时在选择单片机型号STC12C5A60S2后,在CPU栏没有选择默认,而是选择了 Use Extended Linker(LX51) instead of BL51 和 Use Extended Assembler(AX51) instead of ..._keil生成不了hex文件的原因multilple

hibernate 的dialect(方言)配置_hibernate.dialect配置-程序员宅基地

文章浏览阅读4.2k次。转自:https://blog.csdn.net/baidu_40487407/article/details/93042568RDBMS方言RDBMSDialectDB2org.hibernate.dialect.DB2DialectDB2 AS/400org.hibernate.dialect.DB2400DialectDB2 OS390org.hibern..._hibernate.dialect配置

Linux---wifi驱动移植及调试(SSV6x5x)_linux wifi驱动-程序员宅基地

文章浏览阅读4.4k次,点赞2次,收藏21次。南方硅谷ssv6x5x驱动移植_linux wifi驱动

Win10系统怎么使用U盘重装(图文并茂)_windows10下载u盘安装-程序员宅基地

文章浏览阅读6k次,点赞6次,收藏56次。本教程一共分为了10个步骤,每一个步骤都有图片,相对来说非常详细了,欢迎大家讨论与学习!_windows10下载u盘安装

随便推点

记录一次kafka内存溢出,消费慢_kafka消费导致内存泄露-程序员宅基地

文章浏览阅读1k次。记录一次kafka内存溢出,消费慢_kafka消费导致内存泄露

前端学习week9-程序员宅基地

文章浏览阅读933次,点赞12次,收藏29次。数据存储在用户浏览器中设置、读取方便、甚至页面刷新不丢失数据容量较大,sessionStorage和localStorage约5M左右正则表达式是用于匹配字符串中正负组合的模式。在JavaScript中,正则表达式也是对象,通常用来查找、替换哪些符合正则表达式的文本作用:表单验证、过滤敏感词、字符串中提取我们想要的部分const 变量名 = /表达式/其中/ /是正则表达式字面量基于VueCli自定义创建项目架子安装脚手架创建项目。

解决syszuxpinyin重复点击lineEdit无法弹出输入法界面和无法删除原有内容问题_qlineedit输入中文无法删除-程序员宅基地

文章浏览阅读2.1k次。解决方法均来源于论坛,自己把它给整理一下1,因为自己做的界面用到了lineedit,但是发现第一次点击lineedit获得焦点就可以弹出输入法界面,但是再重复点击的时候就不能弹出来了,必须重新获得焦点,于是通过重载重载了QLineEdit的mousePressEvent在mousePressEvent加上一个自定义的信号 emit clicked()重载代码如下:mylineedi_qlineedit输入中文无法删除

jeb 下载-程序员宅基地

文章浏览阅读1k次。jeb-1.5.201408040(full)_keygen_by_scz(20150725) http://scz.617.cn/ 修改jeb_wincon.bat 中java home 变量,然后就可以启动 注册机 java kegen_jeb下载 csdn

python绿色参数_Python进阶三部曲之IO操作-程序员宅基地

文章浏览阅读60次。IO编程文件读写打开文件open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True) 具体需要查看API,这里只介绍几个常用的方法。open函数的文件名是必传参数,返回一个文件对象#打开一个文件。f = open('read.txt', 'r')open函数的mode参数:值..._python程序里面传进去的参数是绿色

高通平台8953 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)_高通提取dtb-程序员宅基地

文章浏览阅读5.8k次,点赞3次,收藏61次。本系列导航:高通平台8953 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)高通平台8953 Linux DTS(Device Tree Source)设备树详解之二(DTS设备树匹配过程)高通平台8953 Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953 android7.1实例分析篇)一.什么是DTS?为..._高通提取dtb

推荐文章

热门文章

相关标签