更多学习资料戳!!!
在 Java 中除了内部类之外,还有一种匿名内部类。匿名内部类就是指没用一个具体名称的类,且是在接口和抽象类的应用上发展起来的,那么你明内部类有哪些作用呢?例如,现在有如下的代码。
范例:一个简单的操作
interface A { //定义接口A
public void printInfo(); //定义抽象方法
}
class B implements A { //定义接口实现类
public void printInfo () { //覆写抽象方法
System.out.printIn("Hello World!!!") ;
}
}
class X { //定义X类
public void fun1() { //定义fun1()方法
this.fun2(new B()) ; //传递子类实例
}
public void fun2(A a) { //接收接口实例
a.printInfo() ; //调用接口方法
}
}
public class NoInnerClassDemo01 {
public static void main(String args[]) {
nex X().fun1() ; //实例化X类对象并调用fun1()方法
}
}
复制代码
程序运行结果:
Hello World!!!
相信你们对于本程序都应该很容易读懂,但是现在如果接口的实现类只使用一次,那么还有必要单独定义一个子类 B 吗?很明显是没有必要的,所以此时就可以使用匿名内部类完成,代码修改如下。
范例:匿名内部类
interface A { //定义接口A
public void printInfo(); //定义抽象方法
}
class X {
public void fun1(){ //定义X类
this.fun2(new A() { //定义fun1()方法
public void printInfo() { //匿名内部类
System.out.printIn("Hello World!!!");
}
});
}
public void fun2(A a){ //接收接口实例
a.printInfo(); //调用接口方法
}
}
public class NoInnerClassDemo02 {
public ststic void main(String args[]) {
new X().fun1(); //实例化X类对象并调用fun1()方法
}
}
复制代码
程序运行结果:
Hello World!!!
以上程序定义了一个匿名内部类,对于以上代码可能有一些读者看到不是很清楚,下面分步为读者解释此代码。
(1)直接实例化接口对象,代码如下:
此时,是直接为接口实例化,从前面的概念应该知道,接口本身是不能直接进行实例化的,所以在接口实例化后要有一个大括号,在其中编写具体的实现方法。
(2)实现抽象方法,代码如下。
new A() { //匿名内部类
public void printInfo() { //实现接口中的抽象方法
System.out.printIn("Hello World!!!");
}
}
复制代码
整个代码编写完后,实例上此时就是一个接口的实例化对象了,其中的抽象方法也就实现了。
搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核
评论