java的接口是通过interface来实现
为什么要有接口?
java没有多继承 可以用接口来实现多继承的功能 因为类是两个相同事物的共性抽取出来的,接口可以 看做是两个不同事物的某一个特性抽取出来. eg: 小东和牧羊犬都会吃饭,难道他们俩是同一类事物吗? 肯定不是的.那么他们都会吃饭的这个特性就可以抽取成一个接口来使用 接口说白了也即是 完成类所不合理的一些特征而存在的 弥补类的短板
接口的特征
* * 1:接口的使用 * interface 来定义 * * 2: java中 接口和类是并列的两个结构 * * 3 : 定义接口中的成员 * jdk7 以及以前 : 接口中只能定义全局常量和抽象方法 * > 全局常量: public static final :但是书写是常常省略 public static fianl * > 抽象方法: public abstract * * jdk8: 除了定义全局常量和抽象方法之外,还可以定义静态方法, 默认方法 * * * 4 : 接口中不能定义构造器,也就是不能被实例化 * * 5: 在java开发中几口通过让类去实现(implements)的方式来使用, * 如果实现类 覆盖了接口中的所有抽象方法,则此实现类就可以实例化 * 如果实现类没有重写完所有的抽象方法,则此实现类还是一个抽象类 * * * * 6: java类实现多个接口 -----> 弥补了java单继承性的局限性 * 格式 : class AA implements BB, CC, DD, EE * * * 7: 接口与接口之间可以继承,而且可以多继承 * * 8: 接口的具体使用: 体现了多态 * * 9: 接口实际上可以看做是一种规范
面试题:
排错
interface A { int x = 0; } class B { int x = 1; } class C extends B implements A { public void pX() { System.out.println(x); } public static void main(String[] args) { new C().pX(); } }
pX() 方法的x没有声明形参,所以此处有问题
扫描二维码关注公众号,回复:
7496207 查看本文章
interface Playable { void play(); } interface Bounceable { void play(); } interface Rollable extends Playable, Bounceable { Ball ball = new Ball("PingPang"); } class Ball implements Rollable { private String name; public String getName() { return name; } public Ball(String name) { this.name = name; } public void play() { ball = new Ball("Football"); System.out.println(ball.getName()); } }
Rollable接口中没有重写 继承来的接口中的方法,
Ball 中的ball属性是不能重写定义的 因为此变量是在Rollable 接口中定义的 ,
接口中的变量时常量是不可以被改变的
练习题
定义一个接口用来实现两个对象的比较。 interface CompareObject{ } 定义一个Circle类,声明redius属性,提供getter和setter方法 定义一个ComparableCircle类,继承Circle类并且实现CompareObject接口。在 ComparableCircle类中给出接口中方法compareTo的实现体,用来比较两个圆的半 径大小。 定义一个测试类InterfaceTest,创建两个ComparableCircle对象,调用compareTo 方法比较两个类的半径大小。 思考:参照上述做法定义矩形类Rectangle和ComparableRectangle类,在 ComparableRectangle类中给出compareTo方法的实现,比较两个矩形的面积大小