Java教程:Java的内部类
1、成员内部类
成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。同时外部类要访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。免费学最新Java技术加扣:前面是444中间是513加上089

要注意的是,成员内部类不能含有static的变量和方法。因为成员内部类需要先创建了外部类,才能创建它自己的,了解这一点,就可以明白更多事情,在此省略更多的细节了。在成员内部类要引用外部类对象时,使用outer.this来表示外部类对象;而需要创建内部类对象,可以使用outer.inner obj=outerobj.new inner();
public class Outer {
public static void main(String[] args) {
Outer outer=new Outer();
Outer.Inner inner=outer.new Inner();
inner.print(Outer.new);
inner=outer.getInner();
inner.print(Outer.get);
}

// 个人推荐使用getxxx()来获取成员内部类,尤其是该内部类的构造函数无参数时
public Inner getInner() {
return new Inner();
}
public class Inner {
public void print(String str) {
System.out.println(str);
}
}
}
2、局部内部类
局部内部类,是指内部类定义在方法和作用域内。使用outer.this来表示外部类对象,注意name为final类型,局部内部类要使用形参name,必须加上final.Thinking in Java给了这么两个例子:
定义在方法内:
public class Outer {
public static void main(String[] args) {
Outer outer=new Outer();
Inner inner=outer.getInner(Inner, gz);
System.out.println(inner.getName());
}
public Inner getInner(final String name, String city) {
class InnerImp implements Inner {
private String nameStr=name;
public String getName() {
return nameStr;
}
}
return new InnerImp();
}
}
interface Inner {
String getName();
}
定义在作用域里:
public class Parcel5 {
private void internalTracking(boolean b) {
if (b) {
class TrackingSlip {
private String id;
TrackingSlip(String s) {
id=s;
}
String getSlip() {
return id;
}
}
TrackingSlip ts=new TrackingSlip(slip);
String s=ts.getSlip();
}
}
public void track() {
internalTracking(true);
}
public static void main(String[] args) {
Parcel5 p=new Parcel5();
p.track();
}
}
嵌套内部类,就是修饰为static的内部类。声明为static的内部类,不需要内部类对象和外部类对象之间的联系,就是说我们可以直接引用outer.inner,即不需要创建外部类,也不需要创建内部类。嵌套类和普通的内部类还有一个区别:普通内部类不能有static数据和static属性,也不能包含嵌套类,但嵌套类可以。而嵌套类不能声明为private,一般声明为public,方便调用。
静态内部类,就是修饰为static的内部类,不能引用外部类的成员和方法。不能声明为public,一般声明为private.
静态内部类,可以包含static的成员和方法,而成员内部类不能。
如果要生成静态内部类,outer.inner obj=new outerobj.inner();
/*
* This file is auto-generated. DO NOT MODIFY.
* Original file: frameworks/base/core/java/android/os/IFregService.aidl
*/
package android.os;
public interface IFregService extends android.os.IInterface {
/** Local-side IPC implementation stub class. */
public static abstract class Stub extends android.os.Binder implements
android.os.IFregService {
private static final java.lang.String DESCRIPTOR=android.os.IFregService;
/** Construct the stub at attach it to the interface. */
public Stub() {
this.attachInterface(this, DESCRIPTOR);
}
/**
* Cast an IBinder object into an android.os.IFregService interface,
* generating a proxy if needed.
*/
public static android.os.IFregService asInterface(android.os.IBinder obj) {
if ((obj==null)) {
return null;
}
android.os.IInterface iin=(android.os.IInterface) obj
.queryLocalInterface(DESCRIPTOR);
if (((iin !=null) && (iin instanceof android.os.IFregService))) {
return ((android.os.IFregService) iin);
}
return new android.os.IFregService.Stub.Proxy(obj);
}
public android.os.IBinder asBinder() {
return this;
}
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。作者声明:本教程系本人依照真实经历原创,未经许可,谢绝转载。- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
