zoukankan      html  css  js  c++  java
  • 《Java程序员面试笔试宝典》之为什么Java中有些接口没有任何方法

    由于Java不支持多重继承,即一个类只能有一个父类,为了克服单继承的缺点,Java语言引入了接口这一概念。接口是抽象方法定义的集合(接口中也可以定义一些常量值),是一种特殊的抽象类。接口中只包含方法的定义,没有方法的实现。接口中的所有方法都是抽象的。接口中成员的作用域修饰符都是public,接口中的常量值默认使用public static final修饰。由于一个类可以实现多个接口,因此通常可以采用实现多个接口的方式来间接的达到多重继承的目的。

    在Java语言中,有些接口内部没有声明任何方法,也就是说实现这些接口的类不需要重写任何方法,这些没有任何方法声明的接口又被叫做标识接口,标识接口对实现它的类没有任何语义上的要求,它仅仅充当一个标识的作用,用来表明实现它的类属于一个特定的类型。这个标签类似于汽车的标志图标,每当人们看到一个汽车的标志图标时,就能知道这款汽车的品牌。Java类库中已存在的标识接口有Cloneable和Serializable等。在使用的时候会经常用instanceof来判断实例对象的类型是否实现了一个给定的标识接口。

           下面通过一个例子来详细说明标识接口的作用。例如要开发一款游戏,游戏里面有一个人物角色专门负责出去寻找有用的材料,假设这个人物只收集矿石和武器,而不会收集垃圾,下例通过标识接口来实现这个功能。

    import Java.util.ArrayList;

    interface Stuff{}

    //矿石

    interface Ore extends Stuff{}

    //武器

    interface Weapon extends Stuff{}

    //垃圾

    interface Rubbish extends Stuff{}

    //金矿

    class Gold implements Ore{

           public String toString(){

                  return "Gold";

           }

    }

    //铜矿

    class Copper implements Ore{

           public String toString(){

                  return "Copper";

           }

    }

    //枪

    class Gun implements Weapon{

           public String toString(){

                  return "Gun";

           }

    }

    //榴弹

    class Grenade implements Weapon{

           public String toString(){

                  return "Grenade";

           }

    }

    class Stone implements Rubbish{

           public String toString(){

                  return "Stone";

           }

    }

    public class Test{

           public static ArrayList<Stuff> collectStuff(Stuff[] s){

                  ArrayList<Stuff> al=new ArrayList<Stuff>();

                  for(int i=0;i<s.length;i++){

                         if(!(s[i] instanceof Rubbish))

                                al.add(s[i]);

                  }

                  return al;       

           }

           public static void main(String[] args){

                  Stuff[] s={new Gold(),new Copper(),new Gun(),new Grenade(),new Stone()};

                  ArrayList<Stuff> al=collectStuff(s);

                  System.out.println("The usefull Stuff collected is:");

                  for(int i=0;i<al.size();i++)

                         System.out.println(al.get(i));

           }

    }

           程序运行结果为:

    The usefull Stuff collected is:

    Gold

    Copper

    Gun

    Grenade

           在上例中,设计了三个接口:Ore、Weapon和Rubbish分别代表矿石、武器和垃圾,只要是实现Ore或Weapon的类,游戏中的角色都会认为这是有用的材料,例如:Gold、Copper、Gun、Grenade,因此会收集,只要是实现Rubbish的类,都会被认为是无用的东西,例如Stone,因此不会被收集。

           常见笔试题:

           不能用来修饰interface的有( )

           A:private            B:public              C:protected         D:static

           答案:A、C、D。见上面讲解。


  • 相关阅读:
    canvas,制作炫酷的时钟和倒计时
    【bzoj2142】【礼物】拓展Lucas定理+孙子定理
    【hdu3652】数位dp(浅尝ACM-A)
    【bzoj4152】【The Captain】最短路(堆优化)(浅尝ACM-B)
    【bzoj2190】【仪仗队】欧拉函数+线性筛(浅尝ACM-J)
    【bzoj1087】【互不侵犯King】状压dp裸题(浅尝ACM-D)
    【bzoj1566】【管道取珠】竟然是dp题(浅尝ACM-E)
    【bzoj2957】【楼房重建】另类的线段树(浅尝ACM-H)
    【codevs1907】【方格取数3】二分图最大带权独立集
    二分图变种之最小路径覆盖、最小点覆盖集【poj3041】【poj2060】
  • 原文地址:https://www.cnblogs.com/anyuan9/p/6171652.html
Copyright © 2011-2022 走看看