当前位置:   article > 正文

Java 继承,多态,接口练习_java继承接口程序分析题

java继承接口程序分析题

目的:了解继承,多态,接口之间的关系,以及接口的调用,熟悉使用多态的功能。

一.选择题

题目1:

 1.题干:以下对接口描述错误的有()
A) 接口没有提供构造方法
B) 接口中的方法默认使用public、abstract修饰
C) 接口中的成员变量默认使用public、static、final修饰
D) 接口不允许多继承

 2.答案:        D


3.选项分析
A.接口不是类,所有没有构造方法,所以此选项正确
B.接口中的方法默认是被public abstract修饰的,没有写,默认也有,所以此选项正确
C.接口中的变量,默认是被public static final修饰的,不写默认也有,所以此选项正确
D.类不能多继承,但是一个接口可以继承多个父类,一个实现类继承一个父类的同时实现一个或者多个接口,所以此选项不正确

题目2:

1.题干:
以下哪个接口的定义是正确的?
A.interface B{ void print() { }  }
B.abstract interface B { void print()  } 
C.abstract interface B extends A1,A2 { abstract void   print(){ };
D.interface B { void print();}

 2.答案:        D

3.选项分析:
A选项:接口总的方法默认是抽象方法,抽象方法是没有方法体的,所以此选项错误
B选项:接口中的抽象方法没有分号,所以此选项不正确
C选项:抽象方法不能有方法体,而大括号代表的就是方法体,所以此选项不正确
D选项:定义完全正确,接口中的方法默认是抽象方法,而抽象方法是没有方法体的,所以也就没有大括号.
 

二.简答题

题目1:多态的前提是什么?
1.必须子父类关系或类实现接口关系
2.必须有子类重写父类或接口方法
3.必须有父类引用指向子类对象

三.编程题

题目一


请使用代码描述:    
   奥迪车(Audi)都具有跑的功能,但是智能奥迪车(SmartAudi)除了具有跑的功能外,还具有自动泊车(automaticParking)和无人驾驶(automaticDrive)的功能!
 
   要求:使用多态形式创建对象

训练目标


多态,向下转型


训练提示


利用多态方式创建对象,然后向下转型调用子类特有方法

参考方案


1.定义奥迪车为父类,定义跑的方法
2.定义只能奥迪车,继承父类,定义两个自动泊车和无人驾驶的特有方法
3.利用多态创建对象,利用向下转型调用特有方法



 操作步骤


1.定义奥迪车类(Audi),定义一个跑的方法(run)
2.定义一个智能奥迪车类(SmartAudi),继承父类,然后定义两个方法
  自动泊车方法(automaticParking)无人驾驶的方法         (automaticDrive)
3.定义一个测试类,使用多态形式创建对象,调用从父类继承过来的run方法
  向下转型之后,调用子类特有的自动泊车方法和无人驾驶方法
 

  1. //父类
  2. public class Audi {
  3. public void run(){
  4. System.out.println("奥迪车在跑");
  5. }
  6. }
  7. ```
  8. ```java
  9. //子类
  10. public class SmartAudi extends Audi{
  11. public void automaticParking() {
  12. System.out.println("智能奥迪车在自动泊车");
  13. }
  14. public void automaticDrive() {
  15. System.out.println("智能奥迪车在自动驾驶");
  16. }
  17. }
  1. //测试类
  2. public class Test {
  3. public static void main(String[] args) {
  4. //使用多态形式创建对象
  5. Audi audi = new SmartAudi();
  6. //调用从父类中继承过来的方法
  7. audi.run();
  8. //向下转型,调用子类特有的方法
  9. SmartAudi smartAudi = (SmartAudi)audi;
  10. smartAudi.automaticParking();
  11. smartAudi.automaticDrive();
  12. }
  13. }


题目二


请使用代码描述:  
    我们平时的家用电器,都需要通电,然后开启,或者关闭,而且每个家用电器都有自己特殊的功能,比如:
电视,除了通电之后的开启和关闭,还有播放电视剧的功能
空调,除了通电之后的开启和关闭,还有制冷的功能

要求:将电视和空调的抽取出来


训练目标


接口,继承



训练提示


1.子类(实现类)继承一个父类中的开启,关闭功能的同时去实现接口中的通电功能
2.调用方法


参考方案


1.由于电视和空调都有开启和关闭的功能,所以我们可以抽取出来一个父类,在父类中定义开启和关闭功能
  开启和关闭功能可以定义成抽象方法
2.由于电视和空调只有插在插座上,才能通电,正常使用,所以我们可以定义一个插座的接口,在接口中定义通电的功能
3.由于电视和空调都要插在插座上,以及通电之后开启和关闭,所以需要继承父类的同时实现插座的接口,重写所有的抽象方法
4.创建电视和空调对象,调用重写的方法

 操作步骤


1.定义一个父类Appliance(家用电器),定义两个抽象方法-->开启(open())和关闭(close())
2.定义一个接口Sockets(插座),定义一个抽象方法-->通电(tongDian())
3.定义一个子类(实现类)TV(电视),继承家用电器类的同时实现插座接口,重写抽象方法
4.定义一个子类(实现类)AirConditioning(空调),继承家用电器类的同时实现插座接口,重写抽象方法
5.定义测试类,创建两个子类的对象,调用重写的方法

参考答案

  1. /*
  2. 家用电器
  3. */
  4. public abstract class Appliance {
  5. public abstract void open();
  6. public abstract void close();
  7. }
  8. ```
  9. ```java
  10. //插座
  11. public interface Sockets {
  12. public void tongDian();
  13. }
  1. //电视机类
  2. public class TV extends Appliance implements Sockets{
  3. @Override
  4. public void open() {
  5. System.out.println("电视机打开了");
  6. }
  7. @Override
  8. public void close() {
  9. System.out.println("电视机关闭了");
  10. }
  11. @Override
  12. public void tongDian() {
  13. System.out.println("通电了");
  14. }
  15. //特有方法
  16. public void lookTv(){
  17. System.out.println("看电视剧!");
  18. }
  19. }


 

  1. //空调类
  2. public class AirConditioning extends Appliance implements Sockets{
  3. @Override
  4. public void open() {
  5. System.out.println("空调打开了!");
  6. }
  7. @Override
  8. public void close() {
  9. System.out.println("空调关闭了!");
  10. }
  11. @Override
  12. public void tongDian() {
  13. System.out.println("空调通电了!");
  14. }
  15. //特有方法
  16. public void refrigeration(){
  17. System.out.println("空调制冷了!");
  18. }
  19. }
  1. public class Test {
  2. public static void main(String[] args) {
  3. //创建TV对象
  4. TV tv = new TV();
  5. //调用TV重写的方法
  6. tv.tongDian();
  7. tv.open();
  8. tv.lookTv();
  9. tv.close();
  10. System.out.println("----------分割线----------");
  11. //创建空调对象
  12. AirConditioning ac = new AirConditioning();
  13. //调用空调重写的方法
  14. ac.tongDian();
  15. ac.open();
  16. ac.refrigeration();
  17. ac.close();
  18. }
  19. }

题目三
 

水果都能被榨成汁,在现实生活中,我们需要一个榨汁机,往榨汁机中的装什么水果就被榨成什么果汁,请根据描述设计一个程序
 

训练目标
 

多态,接口



训练提示


定义方法,方法参数传递父类类型或者接口类型,但我们调用方法的时候,实参传递子类或者实现类,就用到了多态,传递哪个子类或者实现类,参数中的父类或者接口就指向哪个子类或者实现类,就调用哪个子类或者实现类重写的方法



 参考方案


1.所有的水果都能变成果汁,所以我们需要抽取出一个水果类或者接口,然后再水果类或者接口中定义一个变成果汁的方法
2.然后定义具体的水果类或者实现类,去实现或者继承水果类或者接口.重写变成水果的方法
3.定义一个榨汁机类,定义一个榨汁方法
  因为,我们将来调用榨汁的方法,指定什么水果就让该水果变成果汁儿,所以为了代码的扩展性,我们可以在榨汁方法的参数位置传递水果类或者接口引用,调用榨汁方法的时候传递具体水果的对象,就调用水果类或者实现类重写的变成果汁儿的方法
4.定义一个实现类,创建榨汁机对象,创建具体水果对象,调用榨汁方法,传递具体的水果类(实现类)对象



操作步骤


1.定义一个接口Fruit(水果接口),其中定义一个toJuice()(变成果汁方法)
2.定义一个实现类Apple(苹果类),实现Fruit接口重写toJuice()方法,输出内容为"苹果变成苹果汁儿"
3.定义一个实现类Banana(香蕉类),实现Fruit接口重写toJuice()方法,输出内容为"香蕉变成香蕉牛奶汁儿"
4.定义一个实现类Mango(芒果类),实现Fruit接口重写toJuice()方法,输出内容为"芒果变成芒果汁儿"
5.定义一个实现类Orange(橙子类),实现Fruit接口重写toJuice()方法,输出内容为"橙子变成橙汁儿"
6.定义一个类ZhaZhiJi(榨汁机类),定义zhaZhi方法,将来在榨汁机中的传递什么水果,就榨成什么汁儿
  所以调用zhaZhi方法传递Fruit接口类型,方法体直接调用toJuice()方法,此处为多态,传递那个水果对象
  Fruit就指向那个水果对象,就会调用那个水果对象重写后的方法



参考答案

  1. //水果接口
  2. public interface Fruit {
  3. public void toJuice();
  4. }
  1. //苹果类
  2. public class Apple implements Fruit {
  3. public void toJuice(){
  4. System.out.println("苹果变成苹果汁儿");
  5. }
  6. }
  1. //香蕉类
  2. public class Banana implements Fruit{
  3. public void toJuice(){
  4. System.out.println("香蕉变成香蕉牛奶汁儿");
  5. }
  6. }
  1. //芒果类
  2. public class Mango implements Fruit{
  3. public void toJuice(){
  4. System.out.println("芒果变成芒果汁儿");
  5. }
  6. }
  1. //橙子类
  2. public class Orange implements Fruit {
  3. @Override
  4. public void toJuice() {
  5. System.out.println("橙子变成橙汁儿");
  6. }
  7. }
  1. //榨汁机类
  2. public class ZhaZhiJi {
  3. /*
  4. 参数传递接口类型或者父类类型,可以接收任何传递过来的子类对象,此处是多态
  5. */
  6. public void zhaZhi(Fruit f ){
  7. System.out.println(" 榨汁机开始运行....");
  8. f.toJuice();
  9. }
  10. }
  1. //测试类
  2. public class Test {
  3. public static void main(String[] args) {
  4. //创建榨汁机的对象
  5. ZhaZhiJi zhaZhiJi = new ZhaZhiJi();
  6. //创建苹果的对象
  7. Apple apple = new Apple();
  8. //创建香蕉的对象
  9. Banana banana = new Banana();
  10. //创建芒果的对象
  11. Mango mango = new Mango();
  12. //创建橘子的对象
  13. Orange orange = new Orange();
  14. //调用榨汁机的榨汁方法完成榨汁
  15. zhaZhiJi.zhaZhi(apple);
  16. zhaZhiJi.zhaZhi(banana);
  17. zhaZhiJi.zhaZhi(mango);
  18. zhaZhiJi.zhaZhi(orange);
  19. }
  20. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/773086
推荐阅读
相关标签
  

闽ICP备14008679号