和类有关的匿名类
和接口有关的匿名类
?
一:和类有关的匿名类
?Java允许用户直接使用一个类的子类的类体创建一个子类对象
在创建子类对象时,除了使用父类的构造方法外还有类体,此类体被认为是一个子类去掉类声明后的类体,称为匿名类
使用匿名类创建对象时,要直接使用父类的构造方法
匿名类就是一个子类,由于无名可用,所以不可能用匿名类声明对象,但却可以直接用匿名类创建一个对象(不可声明,但可创建)
?
附加:如一个类A,他的无参数的构造方法是A(){}
比如假设A是类,那么下列代码是用A类的一个
子类(匿名类)创建对象
new A(){匿名类的类体};
尽管匿名类创建的对象没有经过类声明的步骤,但匿名对象的引用可以传递给一个匹配的参数,匿名类的常用方式是向方法的参数传递
?
?
例子:
package p2;abstract class A { //抽象类不能实例化 public abstract void Aa();}
匿名内部类中,可以隐含实现一个接口、或者是一个类,当然包括抽象类。只不过该匿名类一定要实现抽象类中的抽象方法才可以
package p2;class B { void f(A a){ //这里的a相当于形参 a.Aa(); }} package p2;public class Lianxi2 { public static void main(String args[]){ A a = new A(){ //匿名类创建对象,然后把对象的引用赋给a,a是一个上转型对象 p活动:慈云数据爆款香港服务器,CTG+CN2高速带宽、快速稳定、平均延迟10+ms 速度快,免备案,每月仅需19元!! 点击查看ublic void Aa(){ //重写方法 System.out.println(\”我是A\”); } }; a.Aa(); //上转型对象a调用重写的方法 B b =new B(); //类B实例化new 一个对象b常量 b.f(new A(){ //b调用方法f,括号里面相当于上面那部分,把对象引用传递给方法f里面的参数a public void Aa(){ System.out.println(\”我是B\”); } }); }}
?
注意:
匿名类可以
继承或者重写
父类的方法我们使用匿名类时候,必然是在某个类中直接用匿名类创建对象,因此,
匿名类一定是内部类
匿名类可以访问外嵌类中的成员变量和方法
匿名类的类体中不可以声明static成员变量和static方法
?
?
?
二
:和接口有关的匿名类
假如A是一个接口,那么Java允许直接用接口名和一个类体创建一个匿名对象,此类体被认为是实现了A接口的类去掉声明后的类体,称为匿名类
下面代码是用实现了A 接口的
类(匿名类)创建对象
:
new A(){实现接口的匿名类的类体};
?
如果某个方法的参数是接口类型,那么可以使用接口名和类体组合创建一个匿名对象传递给方法的参数,但类体必须重写接口中的所有方法
如:void f(A a)
其中的参数a是接口,那么在调用f时,可以向f的参数传递一个匿名对象
如:
f(new A(){
实现接口的匿名类的类体
})
46755054
《匿名类只能实例化一次,匿名内部类简单的例子》来自互联网同行内容,若有侵权,请联系我们删除!
还没有评论,来说两句吧...