Java面向对象之接口(二)
前文传送门:Java面向对象之接口(一)
@H_502_5@interface A extends InterfaceC,InterfaceD
的形式,在一定程度上增加了灵活性。不仅这样,Java中的类也可以实现(implements)多个接口,间接地达到所继承的功能,成为“多实现”。接口定义与实现接口
@H_502_5@extends
关键字的出现一定代表着一种继承,或者说是一种扩展,就是子接口可以获得父接口中的成员。注意:接口可以继承接口,但是不能够继承类哦。interface Countable {
int NUM = 50;
}
interface Edible {
String name = "Edible";
void howToEat();
}
interface CreatureDoing extends Edible,Countable {
public abstract void howToSleep();
}
@H_502_5@
System.out.println(CreatureDoing.name);//Edible
System.out.println(CreatureDoing.NUM);//50
@H_502_5@
implements
关键字。格式如下://类实现多个接口
class 类 implements 接口1,接口2{}
//类继承某类,且实现多个接口
class 类1 extends 类2 implements 接口1,接口2{}
@H_502_5@
接口的实现和继承类似,可以获得接口中的成员变量和方法,但是需要注意的是,实现类中需要明确给出所实现的接口的所有抽象方法,否则该实现类需要定义为抽象类。这句话,有点绕,我们知道接口中的抽象方法是需要实现类去实现的,我们又说了接口可以继承接口,类可以实现多个接口。那么,如果接口A中有一个抽象方法method1,接口B继承接口A,有一个抽象方method2,类C继承了这两个接口,就要求C在类中实现这两个抽象方法,这就叫实现所有的抽象方法。
还有一个点就是,实现方法其实就是重写接口中的抽象方法啦,所以必须要声明实现方法为public的,不然不满足重写的要求呢。
接口与多态
@H_502_5@Creature.NUM
。//接口也实现了多态
Edible[] ediblesArray = new Edible[]{new Chicken(),new Orange()};
for (Edible edible : ediblesArray) {
edible.howToEat();
}
接口是否继承于Object
@H_502_5@于是我进行了尝试,我用接口类型的变量调用了Object类的方法:
System.out.println(cd.hashCode());
@H_502_5@
package com.my.pac19;
/**
* @auther Summerday
*/
public class TestEdible {
public static void main(String[] args) {
System.out.println(Countable.NUM);
System.out.println(Edible.name);
//接口 不能用于创建实例,但是可以声明引用类型变量指向其实现类的对象
CreatureDoing cd = new Chicken();
System.out.println(cd.hashCode());
System.out.println();
//接口也实现了多态
Edible[] ediblesArray = new Edible[]{new Chicken(),new Orange()};
for (Edible edible : ediblesArray) {
edible.howToEat();
}
}
}
interface Countable {
int NUM = 50;
}
interface Edible {
String name = "Edible";
public abstract void howToEat();
//redundant 多余的
}
//接口继承接口
interface CreatureDoing extends Edible,Countable {
public abstract void howToSleep();
}
abstract class Animal {
public abstract void call();
}
class Chicken extends Animal implements Edible,CreatureDoing {
//实现Edible中的howToEat方法
@Override
public void howToEat() {
System.out.println("鸡要烤着吃");
}
//实现Animal中的call方法
@Override
public void call() {
System.out.println("咯咯哒");
}
//实现Creature中的howToSleep方法
@Override
public void howToSleep() {
System.out.println("呼呼");
}
}
class Orange implements Edible {
@Override
public void howToEat() {
System.out.println("橘子要剥皮吃");
}
}
本文若有叙述不当之处,欢迎评论区留言交流!
参考链接:
https://stackoverflow.com/questions/6056124/do-interfaces-inherit-from-object-class-in-java?r=SearchResults
https://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.2