Java 习题6 参考答案及解析
来源:互联网 发布:全局优化算法举例 编辑:程序博客网 时间:2024/06/06 19:57
1.问答题
- 接口中能声明变量吗?
- 接口中能定义非抽象方法吗?
- 什么叫接口的回调?
- 接口中的常量可以不指定初值吗?
- 可以在接口中只声明常量,不声明抽象方法吗?
问答题解析
- 不能。
- 不能。
- 可以把实现某一接口的类,所创建的对象的引用,赋给该接口声明的接口变量中。那么该接口变量就可以调用被类实现的接口中的方法。
- 不可以。
- 可以。
接口中可以声明常量、抽象方法以及默认方法和静态方法(jdk1.8新增)
接口的语法规则
- 接口及接口成员默认的访问权限为:public 或友好
- 常量默认添加static final关键字
- 抽象方法默认添加abstract关键字
- 只有default方法及static方法可以添加方法体
- 实现接口的类如果不能实现所有接口中待重写的方法,则必须设置为抽象类
- 接口可以实现多继承,即一个子接口可以同时继承多个父接口
- 一个类可以继承自一个父类,同时实现多个接口
- 当一个类同时实现多接口,且其中同时具有相同方法时,实现类需要重写该方法,否则会编译报错
2.选择题
(1)下列哪个叙述是正确的?
A. 一个类最多可以实现两个接口。
B. 如果一个抽象类实现某个接口,那么它必须重写接口中的全部方法。
C. 如果一个非抽象类实现某个接口,那么它可以只重写接口中的部分方法。
D.允许接口中只有一个抽象方法。
(2)下列接口中标注的(A、B、C、D)中,哪两个是错误的?
Javainterface Takecare{ protected void speakHello();//A public abstract static void cry();//B int f(); //C abstract float g(); //D
(3)将下列(A、B、C、D)哪个代码替换下列程序中的【代码】不会导致编译错误?
A.public int f(){return 100+M;}
B.int f(){return 100;}
C.public double f(){return 2.6;}
D.public abstract int f();
Javainterface Com{ int M = 200; int f();}class ImpCom implements Com{ 【代码】}
2.选择题解析
1.D
一个类可以实现多个接口,但是只能继承一个父类。
非抽象类实现接口必须要重写接口中的全部方法,否则要把该类设置为抽象类,换句话说抽象类实现一个接口是可以不用重写接口中的全部方法的。
2.AB
A中抽象方法的访问修饰符只能用public。
B中abstract和static不能共存。
3.A
接口中的抽象方法默认是public类,那么类在重写接口方法时不仅要去掉abstract修饰符,给出方法体,而且方法的访问权限一定要明显地用public来修饰(不能降低访问权限)。
C选项改变了返回值类型,不属于方法重写。
3.阅读程序
(1)请说出E类中【代码1】和【代码2】的输出结果
Javainterface A{ double f(double x,double y);}class B implements A{ public double f(double x,double y){ return x*y; } int g(int a,int b){ return a+b; }}public class E{public static void main(String args[]){ A a = new B(); System.out.println(a.f(3,5));//【代码1】 B b = (B)a; System.out.println(b.g(3,5));//【代码2】 } }
(2)请说出E类中【代码1】和【代码2】的输出结果。
Javainterface Com{ int add(int a,int b);}abstract class A{ abstract int add(int a,int b);}class B extends A implements Com{ public int add(int a,int b){ return a+b; }}public class E{public static void main(String args[]){ B b = new B() Com com = b; System.out.println(com.add(12,6));//【代码1】 A a = b; System.out.println(a.add(10,5));//【代码2】 } }
阅读程序解析
1.【代码1】:15.0 【代码2】:8
B类实现了A接口,并重写A中的方法。A a = new B()是接口回调(可以把实现某一接口的类,所创建的对象的引用,赋给该接口声明的接口变量中。那么该接口变量就可以调用被类实现的接口中的方法。)所以用接口变量a调用B类中的f方法。返回15.0 。
B b = (B)a将a对象强制转换为B类的对象,可以调用B类中的g方法返回8
2.【代码1】:18【代码2】:15
B类继承了A类并实现了Com接口,Com com = b是接口回调,所以com可以调用B类中的add方法输出18,A a = b是上转型(子类引用赋值给父类对象),那么a也可以调用子类重写父类的方法add,输出15.
编程题
该题目和第5章习题5的编程题类似,只不过这里要求使用接口而已。
设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声,要求如下。
编写接口Animal
Animal接口有两个抽象方法cry()和getAnimalName(),即要求实现该接口的各种具体的动物类给出自己的叫声和种类名称。
编写模拟器类Simulator
该类有一个playSound(Animal animal)方法,该方法的参数是Animal类型,即参数animal可以调用实现Animal接口类重写的cry()方法播放具体动物的声音,调用重写的getAnimalName()方法显示动物种类的名称。
编写实现Anima接口l的Dog类和Cat类
编写主类Application(用户程序)
在主类Application的main方法中至少包含如下代码:
Simulator simulator = new Simulator();simulator.playSound(new Dog());simulator.playSound(new Cat());
编程题解析
JavaAnimal.javapublic interface Animal{ public abstract void cry(); public abstract String getAnimalName();}Simulator.javapublic class Simulator{ public void playSound(Animal animal){ System.out.print("现在播放"+animal.getAnimalName()+"类的声音:"); animal.cry(); }}Dog.javapublic class Dog implements Animal{ public void cry(){ System.out.println("汪汪...汪汪"); } public String getAnimalName(){ return "狗"; }}Cat.javapublic class Cat implements Animal{ public void cry(){ System.out.println("喵喵...喵喵"); } public String getAnimalName(){ return "猫"; }}Application.javapublic class E{public static void main(String args[]){ Simulator simulator = new Simulator(); simulator.playSound(new Dog()); simulator.playSound(new Cat()); } }
- Java 习题6 参考答案及解析
- Java 习题3 参考答案及解析
- Java 习题1 参考答案及解析
- Java 习题8 参考答案及解析
- Java 习题9 参考答案及解析
- Java 习题7和习题10 参考答案及解析
- Java 习题2 参考答案及解析(2)
- Java 习题5 参考答案及解析(1)
- Java 习题5 参考答案及解析(2)
- Java 习题4 答案及解析
- 《汇编语言程序设计教程》人民邮电出版社第二版习题及参考答案
- 第十三讲习题参考答案
- 北大ACM习题参考答案
- apue 习题4.6参考答案
- 2011蓝桥杯java试题及部分参考答案
- 第一章 绪论习题参考答案
- 第六届蓝桥杯省赛(java)C组试题及参考答案
- Linux试题及参考答案
- 复盘移动支付:中国领先世界,只用了30年
- 随笔---laravel广播事件
- service的onStartCommand走两遍
- Linux常用命令(二)——文件处理命令(未拓展)
- IOS递归加载多资源(Image)的crash问题【creator 1.4.2】
- Java 习题6 参考答案及解析
- Java内存分配
- Jquery Mobile 實現登錄,資料顯示 ,有源碼
- Android脚本envsetup.sh逐行分析
- 6.13
- 尚学堂百战程序员1573题 第五章
- Spring Framework之BeanFactoryPostProcessor和BeanPostProcessor(TODO)
- 时间复杂度的计算
- MyBatis中$与#的区别