Day4

接口是特殊的抽象类

接口和类是完全不同的机制,接口可以多继承,类不可以

接口没有构造方法

有抽象方法 可以有常量,完整限定符public static final

特性:接口不可以被实例化;

实现类必须实现接口的所有方法;

本章作业

一、选择题

1.下面的程序中定义了一个Java接口,其中包含( C )处错误。

public  interface Utility  {

private  int MAX_SIZE=20;//

int  MIN_SIZE=10;

void  use() {   //

   System.out.println(“using  it”);

}

private  int getSize();//

void  setSize(int  i);

}

A. 1

B. 2

C. 3

D. 4

 

2.给定如下Java代码,可以填入横线处的语句是(A B )。

public  interface Utility  { }

 

class  FourWheeler  implements  Utility{ }

class  Car extends  FourWheeler{ }

class  Bus extends  FourWheeler{ }

 

public  class Test  {

public  static void  main(String[]  args) {

_________________

}

}

A. Utility  car=new Car();

B. FourWheeler  bus=new Bus();

C. Utility  ut=new Utility();

D. Bus  bus=new FourWheeler();

 

3.以下关于接口的说法中,正确的是( AD )。

A.接口中全部方法都是抽象方法,所有方法必须是public访问权限

B.  接口中属性都使用pubic  static final修饰,没有显式赋值将使用默认值

C.接口可以有构造方法

D.一个类只能有一个父类,但可以同时实现多个接口

 

4.给定下面的Java代码,可以填入下划线处的语句是( C )。

public  interface Constants {

int  MAX=50;

int  MIN=1;

}

public  class Test  {

public  static voi  main(String[]  args) {

___________

}

}

A. Constants  con=new Constants();

B. Constants.MAX=100;

C. int  i=Constants.MAX-Constants.MIN;

D. Constants.MIN>0;

5.给定下面的C#代码,可以填入下划线处的语句是( B )。

public  interface IUtility  {

_____________

}

A. int  PI=3.14;

B. public  void show();

C. static  string comp();

D. string  concat();

二、简答题

1.请说明下面的代码中存在什么问题,该如何解决?

public  interface Utility  { }

class  Phone implements  Utility  {

   void use()  {

       System.out.println(“using  phone”);

   }

}

public  class Test  {

   public static  void  main(String[ ]  args) {

      Utility util=new  Phone();

      util.use();//问题所在,父类类型变量直接引用子类特有方法。

父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无可奈何的;
同时,父类中的一个方法只有在在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用;
对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。

   }

}

2.阅读如下Java代码,指出其中存在的错误,并说明错误原因。

public  interface Constants  {

   int MAX=10000;

   int MIN=1;

}

public  class Test  {

   public static  void  main(String[ ]  args) {

       Constants  con=new Constants();//不能实例化的抽象类

       System.out.println(con.MAX); //不能用实例化调用属性

       int i=50;

       if(i>Constants.MAX)  { //不能用接口名调用属性

           Constants.MAX=i; //全局静态常量属性不能更改

       }

   }

}
3.阅读如下Java代码,给出运行结果。

public  interface Animal {

void  shout();

}

class  Dog implements  Animal  {

public  void shout()  {

    System.out.println(“W W!”);

}

}

class  Cat implements  Animal  {

public  void shout()  {

     System.out.println(“M M!”);

}

}

class  Store {

public  static Animal  get(String  choice) {

     if(choice.equalsIgnoreCase(“dog”)) {

          return  new Dog();

     } else  {

          return  new Cat();

     }

}   

}

public  class AnimalTest  {

public  static void  main(String[ ]  args) {

        Animal al=Store.get(“dog”);

        al.shout();

    }

}

输出:
W W!

——提示———————————————————————————————————

结合面向接口编程以及多态性来理解这段代码。

———————————————————————————————————————

4.在第3题基础上进行功能扩展,要求如下。

Ø 增加一种新的动物类型:Pig(猪),实现shout()方法。

Ø 修改Store类的get方法:如果传入的参数是字符串dog,则返回一个Dog对象,如果传入的参数是字符串pig,则返回一个Pig对象;否则,返回一个Cat对象。

Ø 在测试类Test中加以测试:向Store的get方法中传入参数“pig”,并在返回的对象上调用shout方法,看看与预期的结果是否一致。

——提示———————————————————————————————————

按照题目要求增加pig类、修改Store类的get方法。

———————————————————————————————————————

5.对贯穿案例电子宠物系统的类结构进行重构,要求如下。

Ø 定义Eatable接口,在接口中定义eat()方法,表示吃饭功能。

Ø 定义FlyingDiscCatchable接口,在接口中定义catchingFlyDisc()方法,表示玩飞盘

功能。

Ø 定义Swimmable接口,在接口中定义swim()方法,表示游泳功能。

Ø 定义抽象类Pet,包括宠物名称name、健康值health和主人亲密度love属性,并提供抽象方法print(),用来输出宠物信息。

Ø 定义狗类Dog,继承Pet类,实现Eatable、FlyingDiscCatchable接口,并重写或实现各个方法。

Ø 定义企鹅类Penguin和继承类Pet,实现Eatable和Swimmable接口,并重写或实现各个方法。

Ø 编写测试类,实现狗吃饭、企鹅游泳和狗玩接飞盘游戏的功能,并输出企鹅信息。

——提示———————————————————————————————————

按照题目要求依次创建相应接口、抽象类、类并进行测试,参考本章贯穿案例。

———————————————————————————————————————

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值