接口
接口的概念
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
定义接口:
1)接口可以看成是特殊的抽象类。即只包含有抽象方法的抽象类
2)可以通过infterface定义一个接口
3)接口者不可以定义成员变量,但是可以定义常量
4)接口中只可以定义没有实现的方法(抽象方法)
可以省略 public abstract 其中一个或者两个(常量也可以)
接口的继承
接口间存在继承关系,一个接口可以通过extends关键字继承另外一个接口。子接继承了父接口中定义的所有方法。
@Test
public void t1(){
B b = new B(){//可以在子类中通过内部类的方式对父类的抽象方法进行重写
public void a1() {
System.out.println("这是通过匿名内部类通过调用子类构造器对象实现父接口的a1方法");
}
public void a2() {
System.out.println("这是通过匿名内部类通过调用子类构造器对象实现父接口的a2方法");
}
};
b.a1();
b.a2();
B.innerB bb = new B.innerB();//可以通过这种形式创建内部类对象
bb.at3();
B.innerB.at3();
/**
* 注意:类里面可以定义以下三种形式的内部类
* 1)非静态内部类:可以在内部定义若干成员变量和非静态方法,
* 但是不能通过创建外部类对象去调用该普通方法
* 2)静态内部:内部可以定义若干成员变量和若干静态方法、若干非静态方法
* 可以通过 外部类名.内部类名.任何一种方法名() 的方式去调用。
* 3)匿名内部类:在创建类对象时可以通过以下形式去重写(或实现)接口或
* 抽象类的方法,
* 类名 对象名 = new 类名(){//可以在子类中通过内部类的方式对父类的抽象方法进行重写
* public void a1() { }
* public void a2() { }
* …………………………
* 然后通过 对象名.方法名的形式去调用;
*
* 补充和扩展:
* 1)接口也可以创建对象,和类创建对象一致,通过匿名内部类的形式去创建
* 2)可以通过
* Outter.Inner a = new Outter.Inner();
* a.内部类方法();
* 这形式去创建内部类对象(其实抽线类也可以)
*/
---------------------------Java文件分界线--------------------------------------
package myinterface;
public interface A {//定义一个接口
/**
* 接口:
* 1)接口也是一种引用数据类型,文件用interface修饰
* 定义为public interface A{方法体}
* 2) 接口里面可以存在 若干常量 若干抽象方法
* 3)接口子接口必须实现父接口的所有抽象方法(除非子接口是抽象类)
* 4)接口不能implents连接接口,但是接口可以通过extends继承接口
* 抽象类可以连接接口
* public interface B extends A { }
* public abstract class B implements A { }
*/
final static int c=1;//常量
public abstract void a1();
public abstract void a2();
// public static void a3();//Extends method are not supported at language level '5'
}
---------------------------Java文件分界线--------------------------------------
package myinterface;
public abstract class B implements A {
//接口子接口必须实现父接口的所有抽象方法
public void a1() {
System.out.println("B抽象类中实现接口A方法a1");
}
public void a2() {
System.out.println("B抽象类中实现接口A方法a2");
}
public static class innerB{
public static void at3(){
System.out.println("这是子类B的静态方法");
}
}
}
---------------------------Java文件分界线--------------------------------------
@Test
public void t2(){
A a = new A(){
public void a1() {
System.out.println("这是通过匿名内部创建的接口去实例化的方法a1");
}
public void a2() { System.out.println("这是通过匿名内部创建的接口去实例化的方法a1");}
};
a.a1();
a.a2();
}
接口与抽象类的区别