JAVA之interface
来源:互联网 发布:dc大事件 知乎 编辑:程序博客网 时间:2024/05/16 13:33
JAVA只允许单继承,但是有的类同时具有两个货以上的类的特征,而接口正是解决JAVA类单继承的问题。关于JAVA接口,我们先总结几点说明,然后通过一个例子来对总结进行阐释
JAVA接口有以下几个特征:
①接口是抽象方法和常量值(public static final)的集合,之所以其成员变量都是public static final,这是为了修正C++多继承中容易出现的问题(多继承的多个父类之间如果有相同的成员变量,引用起来比较麻烦,而且容易出现各种问题)。接口中声明的属性默认是public static final,并且也只能是public static final,接口中只能定义抽象方法,并且这些方法默认是public,而且也只能是public。
②从本质上讲,接口是一种特殊的抽象类,这种抽象类只包含常量和方法的定义,而没有变量和方法的实现。
③多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口
④与继承关系类似,接口与实现类之间也存在多态现象。
⑤引入接口后,定义JAVA类的完整语法如下:
< modifier > class < name > [ extends < superClass > ] [ implements < interafce > [ , [ interface ] * ] ] {
< declarations >*
}
⑥接口还可以继承其他接口,并添加新的属性和抽象方法。
看下面实例:
以上的打印结果是:
student is sleeping
student is singing
teacher is sleeping
teacher is singing
teacher is eating
Teacher和Student都实现了Singer接口,但他们并没有什么关系,同时,Teacher实现了两个接口:Singer和Painter,而这两个类也是没有关系的。这也就验证了③。
关于④的解释:第60行,虽然s1指向的是一个Student类实例,但是,s1被编译器看做Singer类,所以s1就不能调用student中特有的属性或方法。亦即:
以上两句是错误的,myEclipse给出的错误提示在注释中。
63行代码:虽然Teacher同时实现了Singer接口和Painter接口,但由于s2被声明为Singer类,所以s2是不能访问Teacher的teach(),paint(),eat()和getName()方法的。
但是可以通过强制转换,把原来Singer的s2转换为Painter,这样就可以访问Painter的方法了。我们可以理解为某个对象声明为什么类,那么他就只能“看见”这个类的相关属性和方法。
这里,再补充另一个小例子,这是一个神奇的现象,不过暂时还没有找到解决办法:
上例中,TestInterface同时实现了A和B接口,而A和B接口又有相同的抽象方法 public double getMoney(); 然后在实现这两个接口时,我只写了一个getMoney(),并且这是可以通过编译的。
然而像下面这样就不对了:A和B接口拥有方法签名一样返回值不一样的getMoney()方法,如果只实现其中一个getMoney()是不对的,因为类要实现它所有接口中的所有方法,但是如果都想实现,也不对,因为同一个类中是不允许出现方法签名一样而返回值不一样的情况,因为无法区分这两个方法。。。。。。。。。。。
- JAVA之interface
- JAVA基础之interface
- java之接口:interface
- Java之interface关键字
- java学习之interface
- JAVA学习资料之interface
- Java杂谈之Interface接口
- java泛型 之 入门(interface)
- java之@interface-自定义注解
- java之abstract class和interface
- java学习之Object,final,interface
- java之interface与abstrac的理解
- Java学习笔记之接口Interface
- (2.1.11)Java之接口interface
- Java 8 预览之Functional Interface
- java之interface--产生常量群
- android开发之java native interface
- android Java 面向对象编程之 interface
- Struts2 学习笔记——struts.xml文件之Bean的配置
- ubuntu下用rename批量修改文件名
- Qt版本-塔防游戏实现一
- 【boost::smatr_ptr】scoped_ptr
- 屡试不爽--->马文和汤姆猫的暧昧
- JAVA之interface
- C++中的字符串基础知识
- printk的用法
- The string "--" is not permitted within comments.
- Qt下使用QWebview
- 对新手有用的JavaScript开发小建议
- 解决多线程代码中的11个常见的问题
- 长度为0的数组——C语言的非标准用法之一
- Exercises2.2 E2(use stack method)