首页 > 编程知识 正文

Java匿名对象,java匿名内部类

时间:2023-05-06 20:57:54 阅读:60077 作者:3966

匿名内部类:匿名内部类与正规继承相比受到一些限制。 匿名内部类可以扩展类,也可以实现接口,但这两者并不是兼而有之的,因为实现接口只能实现一个接口

一. contents ()方法将返回值的生成与表示返回值的类的定义组合在一起! 另外,这个类是匿名的,没有名字。 更糟的是,它看起来像是要创建一个Contents对象,但它说:“在到达语句的最后一个分号之前,例如: '。 我想在这里插入类的定义。' 以下代码在缺省构造函数中实现了接口Contents

//:接口匿名类

//: inner classes/contents.Java

打包对象; publicinterfacecontents { intvalue (;

//://3360 inner classes/parcel7. Java//returninganinstanceofananonymousinnnerclass。

打包对象; public class parcel7{ publiccontentscontents (} { return new contents ) { //Insert a class definition //在此为默认构造函数

私密int I=11; 公共int value () { returni; }

(; //Semicolon required in this case

} publicstaticvoidmain (字符串[ ] args ) )

Parcel7 p=newParcel7(;

Contents c=p.contents (;

}

}///:~

//上面的Parcel7类是下面的Parcel7类的简化

//: inner classes/parcel 7b.Java

//expandedversionofparcel7. Java

打包对象;

公共类面板7b {

classmycontentsimplementscontents {

私密int I=11;

公共int value () { return i; }

}

公共内容内容() { return new MyContents; }

publicstaticvoidmain (字符串[ ] args ) {

Parcel7b p=new Parcel7b (;

Contents c=p.contents (;

}

} ///:~

2 .如果需要具有参数的构造函数,该怎么办? 只需要将适当的参数传递给基类构造函数。 以下,用带参数的构造函数实现了具有具体安装的一般类。 在这里,将x传递给了newWrapping(x )。 wrapping作为公共“接口”被其导出类使用,尽管它是具有具体实现的一般类。

//: inner classes/wrapping.Java

打包对象; 公共类扭曲{私有Inti; 公共扭曲(intx ) I=x; }public int value () { returni; }

//://3360 inner classes/parcel8. Java//callingthebase-class constructor。

打包对象; public class parcel8{ publicwrappingwrapping (intx ) )/baseconstructorcall:}

returnnewwrapping(x ) { //Pass constructor argument. \x值传递给wrapping (intx )构造函数

公共intvalue ((return super.value ) ) * 47; //(这里是Wrapping类中的value ) )方法

}

(; //Semicolon required //这里的分号不是用来标记内部类的结尾,实际上是标记表达式的结尾

} publicstaticvoidmain (字符串[ ] args ) )

Parcel8 p=newParcel8(;

wrappingw=p.wrapping(10;

}

}///:~

在匿名类中定义字段后,也可以将其初始化。 如果定义匿名内部类并使用该外部定义的对象,编译器将在引用该参数时请求final的(jdk1.8中可以不使用final )。

//: inner classes/destination.Java

打包对象; 公共接口目标{

字符串读取标签(;

//://: inner classes/parce L9.Java//ananonymousinnerclassthatperforms//initial ization.abrieferversion

打包对象; 公共类parcel9//argumentmustbefinaltouseinside//anonymous inner类3360

publicdestinationdestination (finalstringdest ) /这里的书写的是final,但是从jdk1.8开始可以不用final。 return newDestination ) )私有发布命令readlabel ((return label; }

(;

} publicstaticvoidmain (字符串[ ] args ) )

Parcel9 p=newParcel9(;

目的地d=p .目的地(' Tasmania ';

}

}///:~

匿名类中不是有构造函数(因为没有名字! 但是,实例初始化提供了为匿名内部类创建构造函数的效果

//: inner classes/anonymous constructor.Java//creatingaconstructorforananonymousinnnerclass。

打包对象; importstaticnet.mindview.util.print.*; 基于abstract class base {公共基(inti ) }

print('baseconstructor,i=' i );

}公共基础语音(;

} publicclassanonymousconstructor { publicstaticbasegetbase (inti ) returnnewbase )//其中基类(abstract ) base的构造函数

{ print (insideinstanceinitializer ); 公共语音() {

打印(inanonymousf ) ) ) );

}

(;

} publicstaticvoidmain (字符串[ ] args ) )

基本=get base (47;

base.f (;

}

(}/*Output:

基本构造器,i=47

Inside实例初始化器

inanonymousf((*///:~

以下是带实例初始化的“parcel”格式

//: inner classes/destination.Java

打包对象; 公共接口目标{

字符串读取标签(;

//:~~//: inner classes/parcel 10.Java//using ' instanceinitialization ' to perform///constructionononanananation

打包对象; 公共类parcel 10 {公共目标}

destination(finalstringdest,final floatprice ) {return newDestination ) ) {private intcost; //instanceinitializationforeachobject :

{

cost=math.round(price; If (成本100 ) )。

system.out.println('overbudget!' );

}private String label=dest; publicstringreadlabel ((返回标签; }

(;

} publicstaticvoidmain (字符串[ ] args ) )

Parcel10 p=newParcel10 (;

目的地d=p .目的地(' Tasmania ',101.395F );

}

(}/*Output:

Over budget! *///:~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。