一、接口功能
1.1、接口定义了一个类所能对外提供的一个功能(即方法)。接口不能被实例化,只能被实现。
1.2、接口可以理解为纯粹的抽象类,接口中的所以方法都是抽象的,接口描述了一种规则。
实例如下:
点击详见java抽象类问题
package g;
//使用interface声明一个接口,接口声明功能,类实现接口中声明的功能
interface Flyable{
//public abstract 不是必须的,接口的默认方法是public abstract
void Fly();//实际为public abstract void Fly();
//void F();
//void m();
}
//使用关键字implements来实现一个接口
class airPlane implements Flyable{
//实现一个接口,必须实现接口中的所有功能,否则此类必须声明为抽象类
public void Fly() {
System.out.println("飞机能飞,飞机使用发动机飞");
}
}
class Bird implements Flyable{
public void Fly() {
System.out.println("鸟能飞, 鸟使用翅膀飞");
}
}
public class day809 {
public static void main(String[] args) {
Bird bird =new Bird();
bird.Fly();//鸟能飞, 鸟使用翅膀飞
airPlane plane = new airPlane();
plane.Fly();//飞机能飞,飞机使用发动机飞
//接口类型的变量可以引用实现了这个接口的类的实例
Flyable flyable1 =new Bird();//Bird实现了Fiyable接口,因此这个对象可以被flyable1引用
flyable1.Fly();//鸟能飞, 鸟使用翅膀飞, 多态,会调用其引用对象的fly方法
Flyable flyable2=new airPlane();
flyable2.Fly();//飞机能飞,飞机使用发动机飞, 多态,会调用其引用对象的fly方法
}
}
1.3接口中的变量
接口中的变量总是public static final(静态常量),接口中的变量不能声明为private
interface exampleInterface1{
//接口中的变量默认是--public static final,静态常量
//下面value1,value2,value3,value4,都是public static final
int value1=10;
public int value2=10;
public static int value3=10;
public static final int value4=10;
//private int value5=10;编译错误
}
1.4接口中的方法-----默认为public abstract
void method1();
//接口中的方法不允许有private
//private void method6()//编译错误
1.5接口继承
interface SubInterface1 extends exampleInterface1{
void method3();
}
class c1 implements SubInterface1{
public void method1() {}
public void method3() {}
}
interface exampleInterface2{
void method2();
}
//一个类要实现多个接口,它必须要实现接口中的所有方法。
//可以不实现接口中的所有方法,但是类必须声明为抽象的
class SampleImp1 implements exampleInterface1,exampleInterface2{
public void method1() {
System.out.println("method1的实现");
}
public void method2() {
System.out.println("method2的实现");
}
}
public class day810 {
public static void main(String[] args) {
exampleInterface1 i1=new SampleImp1();
i1.method1();//调用SampleImp1对象的method1方法
//i1.method2();//编译看变量类型,exampleInterface1类型变量,无method2方法
exampleInterface2 i2=new SampleImp1();
//i2.method1();//编译看变量类型,exampleInterface2类型变量,无method1方法
i2.method2();
exampleInterface1 i3=(exampleInterface1)i2;//将变量类型为exampleInterface2
//的i2强制转换为exampleInterface1,就可以调用method1了
i3.method1();
}
}