新手请问大家内部类的问题 和子类有什么不同?谢谢~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是我当初看Thinking in java时候摘录和总结的部分,希望对你有用。内部类一、 内部类自动拥有对其外围类的所有成员的访问权。当某个外围类对象创建了一个内部类对象时,此内部类对象必定会秘密地捕获一个指向那个外围类对象的引用。然后,在你访问此外围类的成员时,就是用那个引用来选择外围类的成员。但是如果内部类是非static的,内部类的对象只能在与其外围类的对象相关联的情况下才会被创建。继承内部类的时候也需要其外围类的对象引用,否则继承无效。二、 .this和.new关键字.this:在内部类中生成对其外围类的引用。一般可以使用外围类的名字后面紧跟圆点和this。如果想告知某些其他对象,去创建某个内部类的对象,必须在new表达式中提供对其他外部类对象的引用,这就需要使用.new语法。例如:Public class DotNew{} Public class Inner{}}Public static void main(String args[]){ DotNew dn=new DotNew(); DotNew.Inner dni=dn.new Inner(); //dn.new DotNew.Inner(); 这是错误的}//在拥有外部了对象之前是不可能创建内部类对象的(非Static内部类)三、 内部类可以向上转型(Upcasting)为其基类,或者接口。这时,内部类得到了对接口的引用,能够方便地隐藏实现细节。四、 内部类可以定义在方法和作用域中(需要慢慢地理解)a) 可以定义在一个方法中b) 可以定义在作用域中c) 匿名内部类可以实现一个接口d) 匿名类可以扩展有非默认构造器的类e) 匿名类可以执行字段初始化f) 匿名类可以通过实例初始化实现构造(匿名类不可能有构造器)五、 嵌套类如果不需要内部类对象与其外围类对象之间有联系,那么可以将内部类声明为static普通的内部类自动获取对外围类的引用,而嵌套类具有static的特性,不依赖外围类对象的建立,也没有指向外围类的对象。1、 要创建嵌套类的对象,不需要外围类的对象;嵌套类中不可以使用this引用;2、 不能从嵌套类的对象中访问非static的外围类对象;3、 嵌套类有许多类似static的属性,因为嵌套类本身就是static的,嵌套类可以有static的数据和static字段,还可以包含static的嵌套类,而普通内部类是不可以的。4、 嵌套类可以作为接口的一部分,而一般情况下,接口内是不允许有任何具体的代码的;5、 嵌套类可以作为一些公共代码,使得他们可以被某个接口的所有不同实现所共用;6、 可以使用嵌套类在每个类中都写一个Main()方法,来测试这个类:例如:Public class TestBed{ Public void f(){ System.out.println(“f()”);}Public static void main(String args[]){ TestBed t=new TestBed(); t.f();}}7、 在多层嵌套类中,最深层的嵌套类可以透明地问它所嵌入的外围类的所有成员六、 为什么需要内部类?每个内部类都能独立地继承自一个(接口)的实现,所以无论外围类是否已经继承了某个(接口的)的实现,对于内部类都没有影响。普通的类无法实现对抽象类和普通类的多重继承,而采用内部类可以实现,这在有时候是很有用的。内部类使得多重继承的解决方案变得更加完整。接口的实现解决了部分问题,而内部类有效地实现了“多重继承”,即:内部类可以继承非接口类型。用内部类实现多个接口的意义:1、 内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立;2、 在当个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类;3、 创建内部类对象的时刻并不依赖于外围类对象的创建;4、 内部类并没有令人迷惑的“is-a”关系,它就是一个独立的类。 各位大侠帮帮忙呀,拦截器无法拦截 prepareStatement 操作 mysql语法问题 新人spring mvc 404错误,请求帮助 求助:怎么使模态页面的关闭按钮“X”失效 如何在客户端(请求头信息)隐藏JSESSIONID 用javac命令编译.java文件遇到的问题 请教linux下, 怎样配置J2EE 的classpath , path? 紧急求救!!!大家帮忙看看这个异常信息是怎么造成的! 请教一个Jbuilder9中开发一个简单消息驱动bean的问题 norwaywoods帮我看看这个问题 新手请问大家接口问题 struts2.0与2.1之间问题
一、 内部类自动拥有对其外围类的所有成员的访问权。
当某个外围类对象创建了一个内部类对象时,此内部类对象必定会秘密地捕获一个指向那个外围类对象的引用。然后,在你访问此外围类的成员时,就是用那个引用来选择外围类的成员。但是如果内部类是非static的,内部类的对象只能在与其外围类的对象相关联的情况下才会被创建。继承内部类的时候也需要其外围类的对象引用,否则继承无效。
二、 .this和.new关键字
.this:在内部类中生成对其外围类的引用。一般可以使用外围类的名字后面紧跟圆点和this。
如果想告知某些其他对象,去创建某个内部类的对象,必须在new表达式中提供对其他外部类对象的引用,这就需要使用.new语法。例如:
Public class DotNew{}
Public class Inner{}
}
Public static void main(String args[]){
DotNew dn=new DotNew();
DotNew.Inner dni=dn.new Inner();
//dn.new DotNew.Inner(); 这是错误的
}//在拥有外部了对象之前是不可能创建内部类对象的(非Static内部类)三、 内部类可以向上转型(Upcasting)为其基类,或者接口。这时,内部类得到了对接口的引用,能够方便地隐藏实现细节。
四、 内部类可以定义在方法和作用域中(需要慢慢地理解)
a) 可以定义在一个方法中
b) 可以定义在作用域中
c) 匿名内部类可以实现一个接口
d) 匿名类可以扩展有非默认构造器的类
e) 匿名类可以执行字段初始化
f) 匿名类可以通过实例初始化实现构造(匿名类不可能有构造器)
五、 嵌套类
如果不需要内部类对象与其外围类对象之间有联系,那么可以将内部类声明为static普通的内部类自动获取对外围类的引用,而嵌套类具有static的特性,不依赖外围类对象的建立,也没有指向外围类的对象。
1、 要创建嵌套类的对象,不需要外围类的对象;嵌套类中不可以使用this引用;
2、 不能从嵌套类的对象中访问非static的外围类对象;
3、 嵌套类有许多类似static的属性,因为嵌套类本身就是static的,嵌套类可以有static的数据和static字段,还可以包含static的嵌套类,而普通内部类是不可以的。
4、 嵌套类可以作为接口的一部分,而一般情况下,接口内是不允许有任何具体的代码的;
5、 嵌套类可以作为一些公共代码,使得他们可以被某个接口的所有不同实现所共用;
6、 可以使用嵌套类在每个类中都写一个Main()方法,来测试这个类:例如:
Public class TestBed{
Public void f(){
System.out.println(“f()”);
}
Public static void main(String args[]){
TestBed t=new TestBed();
t.f();
}
}
7、 在多层嵌套类中,最深层的嵌套类可以透明地问它所嵌入的外围类的所有成员
六、 为什么需要内部类?
每个内部类都能独立地继承自一个(接口)的实现,所以无论外围类是否已经继承了某个(接口的)的实现,对于内部类都没有影响。
普通的类无法实现对抽象类和普通类的多重继承,而采用内部类可以实现,这在有时候是很有用的。内部类使得多重继承的解决方案变得更加完整。接口的实现解决了部分问题,而内部类有效地实现了“多重继承”,即:内部类可以继承非接口类型。
用内部类实现多个接口的意义:
1、 内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立;
2、 在当个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类;
3、 创建内部类对象的时刻并不依赖于外围类对象的创建;
4、 内部类并没有令人迷惑的“is-a”关系,它就是一个独立的类。