java匿名内部类返回值_java 匿名内部类

匿名内部类:  匿名内部类与正规的继承相比有些受限,因为匿名内部类既可以扩展类,也可以实现接口,但不能两者兼备,而且如果实现接口,也只能实现一个接口

一.contents()方法将返回值的生成与表示这个返回值的类的定义结合在一起!另外,这个类是匿名的,它没有名字,更糟糕的是,看起来似乎是你要创建一个Contents对象,但是然后(在到达语句结束的分号之前)你却说:"等一等,我想在这里插入一个类的定义."  下面代码用默认构造器来实现了接口Contents

//: 接口匿名类

//: innerclasses/Contents.java

packageobject;public interfaceContents {intvalue();

}///:~//: innerclasses/Parcel7.java//Returning an instance of an anonymous inner class.

packageobject;public classParcel7 {publicContents contents() {return new Contents() { //Insert a class definition //这里用默认构造器实现了Contents的初始化

private int i = 11;public int value() { returni; }

};//Semicolon required in this case

}public static voidmain(String[] args) {

Parcel7 p= newParcel7();

Contents c=p.contents();

}

}///:~

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

//: innerclasses/Parcel7b.java

// Expanded version of Parcel7.java

package object;

public class Parcel7b {

class MyContents implements Contents {

private int i = 11;

public int value() { return i; }

}

public Contents contents() { return new MyContents(); }

public static void main(String[] args) {

Parcel7b p = new Parcel7b();

Contents c = p.contents();

}

} ///:~

二.如果需要一个有参数的构造器,该怎么办,只需要简单地传递合适的参数给基类的构造器即可,下面用带参构造器实现了有具体实现的普通类,这里将X传进了new Wrapping(x),尽管Wrapping只是一个具有具体实现的普通类,但它还是被其导出类当作公共的"接口"来使用:

//: innerclasses/Wrapping.java

packageobject;public classWrapping {private inti;public Wrapping(int x) { i =x; }public int value() { returni; }

}///:~//: innerclasses/Parcel8.java//Calling the base-class constructor.

packageobject;public classParcel8 {public Wrapping wrapping(intx) {//Base constructor call:

return new Wrapping(x) { //Pass constructor argument. \\x值被传递给Wrapping(int x)构造器

public intvalue() {return super.value() * 47; //这里调用了Wrapping类里面的value()方法

}

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

}public static voidmain(String[] args) {

Parcel8 p= newParcel8();

Wrapping w= p.wrapping(10);

}

}///:~

在匿名类中定义字段时,还能够对其执行初始化操作,如果定义一个匿名内部类,并且希望它使用一个在其外部定义的对象,那么编译器会要求其参数引用时final的(从jdk1.8开始可以不用final了)

//: innerclasses/Destination.java

packageobject;public interfaceDestination {

String readLabel();

}///:~//: innerclasses/Parcel9.java//An anonymous inner class that performs//initialization. A briefer version of Parcel5.java.

packageobject;public classParcel9 {//Argument must be final to use inside//anonymous inner class:

public Destination destination(finalString dest) {//这里书上说要final 但从jdk1.8开始可以不用final了return newDestination() {private String label =dest;public String readLabel() { returnlabel; }

};

}public static voidmain(String[] args) {

Parcel9 p= newParcel9();

Destination d= p.destination("Tasmania");

}

}///:~

在匿名类中不可能有构造器(因为它没有名字!),但通过实例初始化,就能够达到为匿名内部类创建一个构造器的效果.

//: innerclasses/AnonymousConstructor.java//Creating a constructor for an anonymous inner class.

packageobject;import static net.mindview.util.Print.*;abstract classBase {public Base(inti) {

print("Base constructor, i = " +i);

}public abstract voidf();

}public classAnonymousConstructor {public static Base getBase(inti) {return newBase(i) { //这里调用了基类(abstract)Base的构造器

{ print("Inside instance initializer"); }public voidf() {

print("In anonymous f()");

}

};

}public static voidmain(String[] args) {

Base base= getBase(47);

base.f();

}

}/*Output:

Base constructor, i = 47

Inside instance initializer

In anonymous f()*///:~

下面是带实例初始化的"parcel"形式

//: innerclasses/Destination.java

packageobject;public interfaceDestination {

String readLabel();

}///:~//: innerclasses/Parcel10.java//Using "instance initialization" to perform//construction on an anonymous inner class.

packageobject;public classParcel10 {publicDestination

destination(final String dest, final floatprice) {return newDestination() {private intcost;//Instance initialization for each object:

{

cost=Math.round(price);if(cost > 100)

System.out.println("Over budget!");

}private String label =dest;public String readLabel() { returnlabel; }

};

}public static voidmain(String[] args) {

Parcel10 p= newParcel10();

Destination d= p.destination("Tasmania", 101.395F);

}

}/*Output:

Over budget!*///:~

《基于S7-200的全自动洗衣机控制系统》一文主要探讨了如何利用西门S7-200系列微型可编程控制器(PLC)来设计并实现全自动洗衣机控制系统。该系统旨在提升洗衣机的自动化水平,满足现代生活及工业生产对洗衣机功能的更高要求。S7-200系列PLC凭借其高性能与经济性,成为理想的控制设备,其丰富的设计知识方法可确保系统的稳定性可靠性。 洗衣机的历史可追溯至19世纪,从最初的木制手摇洗衣机到电动洗衣机,再到如今的全自动洗衣机,其发展经历了从半自动到全自动再到智能化的演变。全自动洗衣机可自动完成除放衣、取衣启动之外的所有洗衣步骤,极大地便利了人们的生活。在工业领域,洗衣机也在不断进化,追求更高的效率、更低的能耗更优化的结构。 全自动洗衣机的发展历程见证了技术创新的足迹。1932年,前装式滚筒全自动洗衣机的出现标志着洗衣机进入新阶,其在一个滚筒内完成洗涤、漂洗脱水全过程。此后,洗衣机技术不断进步,包括微电脑控制、新型洗涤方式、高速脱水低噪音等特性。近年来,中国在全自动洗衣机制造技术上取得显著进步,产品种类丰富,技术性能优良,产量逐年增长。 全自动洗衣机的控制系统有多种类型,如单片机控制、PLC控制工业控制计算机集中控制。单片机控制虽小巧、功耗低,但开发难度大,硬件保护机制复杂,可能增加故障率维修成本;工业控制计算机则适合大型控制系统,提供强大的软硬件支持。而PLC因其卓越的抗干扰能力、高可靠性、编程便利性、操作简便性、维护快捷性设计灵活性等优势,成为全自动洗衣机控制系统的首选。S7-200系列PLC的模块化设计使系统扩展维护更简单,能够快速完成设计调试,推动洗衣机控制系统向更高级别的自动化迈进。基于S7-200的全自动洗衣机控制系统是现代科技与传统家电的完美结合,体现了PLC技术在日常生活中的广泛应用价值。通过深入理解掌握PLC的工作原理编程技巧,可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值