在传统的教科书或者书籍中都会灌输我们一个观念,那就是抽象类可以被继承(extends),接口可以被实现(implements),但是抽象类不能被实现(implements),接口也不能被继承(extends),但是今天这个观点有些地方被颠覆了。
抽象类可以被继承(extends),接口可以被实现(implements),但是抽象类不能被实现(implements),这三个观点确实没有什么问题,但是接口却是可以被继承的,当然你也许会举一个类似下面的例子来证明接口是不能被继承的,代码如下:
确实上面的代码不能被编译通过,会出现以下错误:
也许你就想以上面的例子来证明我的观点是错误的,但是请看下面的例子:
看看图中高亮部分代码,它是可以通过编译的,下面的编译结果:
另外在C#中我也做过测试,因为在C#中实现和继承没办法从类似于java的implements或者extends关键字看出来,它都是用:符号来体现的,不过看具体代码还是可以看出来的,请看下面一段代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceDay2
{
interfaceInterfaceA
{
intAdd();
}
interfaceInterfaceB:InterfaceA
{
intMinus();
}
}
这段代码是可以在VS中编译通过的。
通过以上实例说明接口之间是可以继承的,也就是所谓的接口扩充,这样一来继承了一个接口的类就有了两个接口的方法。
总结:接口可以继承接口,类只能实现接口。
分享到:
相关推荐
很好的Java面试题第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
3)接口与接口之间可以继承 如: public interface InterfaceA extends InterfaceB{} 4)类可以实现接口,一个类可以多实现接口 如: public class ClassName implements InterfaceA,InterfaceB{} 5)一个类如果实现...
abstract class,只可以包含抽象方法,也包括一些常量的定义,丝毫不带半点实现细节,它只提供接口,可以有数据成员,默认是、同时也必须是static & final型,可以通过Interface name直接访问。Interface可以实现...
当然接口的继承也是使用extends关键字,要多个继承的话只要用逗号把继承的接口隔开即可。 需要注意的是当你接口继承其它接口时候,直接继承父接口的静态常量属性和抽象方法,所以类实现接口时必须实现所有相关的抽象...
5、接口可以继承另外一个接口,使用 extends 关键字。 6、接口与抽象类有些相似,但也有很大区别,比如接口不能包含构造器、变量和实例方法等。 Java接口的具体作用 1、接口定义了一个规范,类实现这个规范即可满足...
当然接口的继承也是和类的继承一样使用extends关键字,要多个继承的话只要用逗号把继承的接口隔开即可。 需要注意的是当你接口继承其它接口时候,直接继承父接口的静态常量属性和抽象方法,所以类实现接口时必须实现...
interface IProgrammer extends IWork , IHobby{备注一下:假如继承的子接口中定义了与父接口中相同属性名称的类型,那么这
原来,接口和抽象类相比,多出的一个优势在于(仅限Java和AS3),一个类可以实现多个接口,但是不能继承多个类。所以,如果在这里改用接口,就一切都好解决了。先定义两个接口: package{ public interface ...
上下级接口可以通过“extends”关键词继承; 接口所有方法都是“public”权限(爱E族); 接口可以定义常量成员,但不能定义变量成员; 类通过“implements”关键词来实现接口,类必须完全实现接口定义的所有...
3-3 演示:示例 7 接口 接口就是某个事物对外提供的一些功能的申明 可以利用接口实现多态,同时接口也弥补了Java单一继承的弱点 使用interface关键字定义接口 一般使用接口声明方法或常量,接口中的方法只能是声明,...
扩充freemarker实现模版继承指令<@extends>,可以实现类似java的继承,模版现在也可以继承了,也可以实现接口.freemarker interface,freemarker extends
要注意只有接口和接口之间使用 继承关键字 extends。类实现接口必须实现其抽象方法,使用实现关键字 implements。 下面的这个例子定义接口User,User有两个抽象方法 getName和setName。 又定义了接口VipUser, 继承...
一个接口可以使用extends关键字去继承一个或多个已有的接口,但在子类的实现时,也必须全部实现所有接口的抽象方法. 一个接口去继承并实现多个接口的例子如下: view plaincopy to clipboardprint? interface A ...
“JAVA设计模式”一书花了很大的部分讨论用interface继承代替实现继承。 好的设计者在他的代码中,大部分用interface,而不是具体的基类。本文讨论为什么设计者会这样选择,并且也介绍一些基于interface的
2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,...
2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,...
第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 可以继承其他类或完成其他接口,在swing编程中常用此方式。 第三,Static Nested Class ...
[DEPRECATED] 使用EventBus-Apt优化实现...public interface IMessageEvent extends IEvent{ void onReceiveMessage(String message); } 2.注册监听,实现事件接口 public MainActivity extends Activity implement
、接口的定义和实现 Interface 接口名{//抽象方法} //定义接口 Class 类名 implements 接口名称{// 类体} 实现接口 5、线程 、线程的定义 即同时执行多个程序段,每个程序段都是一个线程。 、线程的周期 线程的周期...
、接口的定义和实现 Interface 接口名{//抽象方法} //定义接口 Class 类名 implements 接口名称{// 类体} 实现接口 5、线程 、线程的定义 即同时执行多个程序段,每个程序段都是一个线程。 、线程的周期 线程的周期...