面试题 不能用来修饰interface的有()
A. private B.public C.protected D.static
小伙伴们可以在下方评论区留下你的答案,大家一起讨论一起进步!!!
评论区有对本题的详细说明哦!!!
由于 Java 不支持多重继承,即一个类只能有一个父类,为了克服单继承的缺点,Java语
言引入了接口这一概念。接口是抽象方法定义的集合(接口中也可以定义—些常量值),是一
种特殊的抽象类。接口中只包含方法的定义,没有方法的实现。接口中的所有方法都是抽象
的。接口中成员的作用域修饰符都是 public,接口中的常量值默认使用 public statie final 修饰。
由于一个类可以实现多个接口,因此通常可以采用实现多个接口的方式来间接达到多重继承的
目的。
在 Java 语言中,有些接口内部没有声明任何方法,也就是说,实现这些接口的类不需要
重写任何方法,这些没有任何方法声明的接口又被叫做标识接口,标识接口对实现它的类没有
任何语义上的要求,它仅仅充当一个标识的作用,用来表明实现它的类属于一个特定的类型。
这个标签类似于汽车的标志图标,每当人们看到一个汽车的标志图标时,就能知道这款汽车的
品牌。Java 类库中已存在的标识接口有 Cloneable 和 Serializable 等。在使用时会经常用 instan-
ceof 来判断实例对象的类型是否实现了一个给定的标识接口。
下面通过一个例子来详细说明标识接口的作用。例如要开发一款游戏,游戏里面有一个人
物专门负责出去寻找有用的材料,假设这个人物只收集矿石和武器,而不会收集垃圾。下面通
过标识接口来实现这个功能。
interface Stuff{}
// 矿石
interface Ore extends Stuff{}
//武器
interface Weapon extends Stuff{}
// 垃圾
interface Rubblish 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 Rubblish{
public String toString(){
return "Stone";
}
}
public class Test {
public static ArrayList<Stuff> collectStuff(Stuff[] s){
ArrayList<Stuff> al = new ArrayList<>();
for (int i = 0; i < s.length; i++) {
if(!(s[i] instanceof Rubblish))
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("收集到有用的东西是:");
for (int i = 0; i < al.size(); i++)
System.out.println(al.get(i));
}
}
运行结果为:
在上面代码中,
设计了3 个接口:Ore、Weapon 和 Rubbish 分别代表矿石、武器和垃圾,只要
是实现 Ore 或 Weapon 的类,游戏中的角色都会认为这是有用的材料,例如 Gold、Copper,
Gun、Crenade,因此会收集 只要是实现 Rubish 的类,都会被认为是无用的东西,例如
Stone,因此不会被收集。