1.概念
接口是一种特殊的抽象类,这种抽象类中包含抽象方法
2.接口的定义
使用interface关键字来声明接口;
使用implements关键字实现接口;
接口中可以定义哪些内容
jdk8之前 :只能定义抽象方法和静态常量
jdk8之后: 可以定义抽象方法和静态常量, 还可以定义默认方法和静态方法
3.接口的特点
(1)接口是隐式抽象的,声明接口时,可不使用abstract关键字
(2)接口中的方法可为抽象的,默认的,静态的
(3)接口不能被创建对象
(4)接口声明的属性默认为public static final
(5)与继承类似,接口与实现类之间存在多态性
(6)类实现接口时,必须实现接口中的所有方法,否则,该类应声明为抽象类
package Day6.MyInterface;
public interface MyInterface extends InterfaceA,InterfaceB{
//public static final int a=10; 静态常量
int a=10;
//public abstract void play(); 抽象方法
void play();
//默认方法。通过子类对象访问
public default void demo1(){
System.out.println("default demo1");
}
//静态方法,通过接口名访问
public static void demo2(){
System.out.println("static demo2");
}
}
public class Test {
/*
接口是更彻底的抽象,因此接口不能被创建对象,不能有成员变量、构造方法,且成员方法是抽象的,默认的,静态的
设计接口是为了让其他类去继承实现的
*/
public static void main(String[] args) {
MyInterface.demo2();//通过接口名访问静态方法
System.out.println(MyInterface.a);//访问静态常量
}
}
/*
类实现接口 一个类可实现多个接口
要不重写接口中所有的抽象方法,要不将此类声明为抽象类
*/
//public class A implements MyInterface,InterfaceA,InterfaceB{
public class A implements MyInterface{
@Override
public void play() {
System.out.println("重写接口中抽象方法——play");
}
@Override
public void a() {
}
@Override
public void b() {
}
}
public interface InterfaceA {
void a();
}
public interface InterfaceB {
void b();
}
public abstract class Animal {
String name;
public Animal(){
}
public Animal(String name){
this.name=name;
}
public abstract void play();//子类不同,定义为抽象方法
public void eat(){//子类相同,定义为非抽象方法
System.out.println("动物吃");
}
}
public class Bug extends Animal implements Speak{
@Override
public void play() {
System.out.println("虫子玩");
}
@Override
public void speak() {
}
}
public class Fish extends Animal implements Swim{
@Override
public void play() {
}
@Override
public void swim() {
}
}
public interface Speak {
void speak();
}
public interface Swim {
void swim();
}
public class Test {
public static void main(String[] args) {
/*Bug b=new Bug();
Fish f=new Fish();*/
Animal b=new Bug();
Animal f=new Fish();
/*
同样也可以用接口来表示,实现多态性
*/
Speak speak=new Bug();
Swim s=new Fish();
}
}