《Java程序员面试笔试宝典》之为什么Java中有些接口没有任何方法
2014-05-21 22:10
507 查看
由于Java不支持多重继承,即一个类只能有一个父类,为了克服单继承的缺点,Java语言引入了接口这一概念。接口是抽象方法定义的集合(接口中也可以定义一些常量值),是一种特殊的抽象类。接口中只包含方法的定义,没有方法的实现。接口中的所有方法都是抽象的。接口中成员的作用域修饰符都是public,接口中的常量值默认使用public static final修饰。由于一个类可以实现多个接口,因此通常可以采用实现多个接口的方式来间接的达到多重继承的目的。
在Java语言中,有些接口内部没有声明任何方法,也就是说实现这些接口的类不需要重写任何方法,这些没有任何方法声明的接口又被叫做标识接口,标识接口对实现它的类没有任何语义上的要求,它仅仅充当一个标识的作用,用来表明实现它的类属于一个特定的类型。这个标签类似于汽车的标志图标,每当人们看到一个汽车的标志图标时,就能知道这款汽车的品牌。Java类库中已存在的标识接口有Cloneable和Serializable等。在使用的时候会经常用instanceof来判断实例对象的类型是否实现了一个给定的标识接口。
下面通过一个例子来详细说明标识接口的作用。例如要开发一款游戏,游戏里面有一个人物角色专门负责出去寻找有用的材料,假设这个人物只收集矿石和武器,而不会收集垃圾,下例通过标识接口来实现这个功能。
程序运行结果为:
在上例中,设计了三个接口:Ore、Weapon和Rubbish分别代表矿石、武器和垃圾,只要是实现Ore或Weapon的类,游戏中的角色都会认为这是有用的材料,例如:Gold、Copper、Gun、Grenade,因此会收集,只要是实现Rubbish的类,都会被认为是无用的东西,例如Stone,因此不会被收集。
常见笔试题:
不能用来修饰interface的有( )
A:private B:public C:protected D:static
答案:A、C、D。见上面讲解。
出自 新书《Java程序员面试笔试宝典》官网
在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 |
常见笔试题:
不能用来修饰interface的有( )
A:private B:public C:protected D:static
答案:A、C、D。见上面讲解。
出自 新书《Java程序员面试笔试宝典》官网
相关文章推荐
- 《Java程序员面试笔试宝典》之为什么Java中有些接口没有任何方法
- 为什么这些java接口没有抽象方法?浅谈Java标记接口
- 为什么这些java接口没有抽象方法?浅谈Java标记接口
- Java 中接口为什么可以调用 toString 方法,接口中根本就没有 toString 方法?
- Java 中接口为什么可以调用 toString 方法,接口中根本就没有 toString 方法吗?
- 为什么这些java接口没有抽象方法?浅谈Java标记接口
- Java中的static关键字解析(转自海子)__为什么main方法必须是static的,因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问。
- 为什么java序列化接口没有方法却可以完成序列化
- java 学习笔记--Comparator中为什么其他类实现这个接口为什么没有复写equals(Object obj)这个方法?
- Java 中接口为什么可以调用 toString 方法,接口中根本就没有 toString 方法?
- java中为什么接口中的属性和方法都默认为public?
- 在java语言中为什么有时候构造方法有时要构造一个没有参数的方法
- 为什么java方法中只有值传递,没有引用传递
- 关于“JAVA中为什么没有了多继承并出现了接口”这一问题引发的一些思考
- [Java 10 泛型] 泛型通配符 Info<?> i = new Info<String>(); 在程序中定义没有方法的接口,称之为标识接口
- java 重写接口中的方法,为什么必须在前加public呢?
- 在任何一个java工程下(即便是j2ee工程)都可以直接对某一个java文件run as Java Application,但是为什么有的java文件右击,没有“Java Application”
- 2018/01/08JAVA 基础 / 接口与继承/Object类——[思考?question:Object类的方法有什么用?为什么不直接在类中设计方法?
- 五星-原型模式常使用于以下场景--而JAVA中的任何类只要实现了Cloneable标识接口,就可以使用clone方法来进行对象的拷贝
- Java中那些没有定义方法的接口