您的位置:首页 > 其它

内部类的作用

2016-03-15 17:50 393 查看
一、写在类内部的 有名字的类

1.区别于普通类一:写在类里面的类

2可以当做静态成员访问 p.innerClassA=p.getclassA()

3.隐藏内部实现细节,生成高效率代码

二、写在方法内部的类 分为有名的 和匿名的

1.方法内的 内部类

class A{

interface/abstract C  method(){

class B implements interfaceC {};

return new  B()

}

}

注意定义到方法内部,要返回接口或者抽象类,编译即使不调用也编译,作用范围是方法内部

2.方法内某个作用域的内部类

class A{

void  method(boolean a){

if(a){

class B implements interfaceC {};

 }

}

}

3、方法内的匿名类,因为没有名字 所有没有构造器 要遵循原始的默认的

传递参数的

class A{

interfaceC method(string x){

return  new  interfaceC(x) {};
 

}

}
不传递参数 引用外部的变量  要把被引用变量用final来修饰

class A{

interfaceC method(final string x){

return  new  interfaceC( ) {string a=x};
 

}

}
4.链接到外部类

普通内部类可以直接访问外部类的成员 甚至是私有的

三.static内部类(特殊)

  创建静态内部类,不需要创建外部类

 不能从static内部类的一个对象中访问一个外部类对象

  静态内部类不能访问外部的非静态变量


 静态类可以自测

class TestBed {

TestBed() {}

void f() { System.out.println("f()"); }

public static class Tester {

public static void main(String[] args) {

TestBed t = new TestBed();

t.f();

}

}

}

运行java TestBed$Tester命令可以自测

四、创建外部类

public class Parcel11 {

class Contents {

private int i = 11;

public int value() { return i; }

}

class Destination {

private String label;

Destination(String whereTo) {

label = whereTo;

}

String readLabel() { return label; }

}

public static void main(String[] args) {
Parcel11 p = new Parcel11();

 

Parcel11.Contents c = p.new Contents();

Parcel11.Destination d =

p.new Destination("Tanzania");


}

 

}

五。内部类集成,内部类构建器必须同封装类对象的一个句柄联系到一起 具体这里还不是特明白,感觉自己应该去读一读java运行原理运行机之类神马的

class WithInner {

class Inner {}

}

public class InheritInner

extends WithInner.Inner {

//! InheritInner() {} // Won't compile
InheritInner(WithInner wi) {

wi.super();

}

public static void main(String[] args) {

WithInner wi = new WithInner();

InheritInner ii = new InheritInner(wi);

}

}

 

六、继承后内部类执行顺序

     1.一个类继承一个有内部类的类,则构造函数执行方法为:

      执行外部父类构造函数,然后再执行 继承外部类的构造函数

     也就是说内部类不被初始化

    2.如果是A外部类继承B外部类,且A的内部类继承B的外部类B.innerclass,则执行的顺序是,

     执行B内部构造函数,执行B构造函数 ,执行A构造函数

七、内部类编译后的class命名规则

       封装类(外部类)$内部类名$内部类名....class

       如果是匿名类 会生成一串数字

八、内部类的控制框架的作用,一个框架是一个整体,其他类负责完成部分功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: