﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-raekwon-随笔分类-JAVA语法</title><link>http://www.blogjava.net/raekwon/category/15750.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 06:35:05 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 06:35:05 GMT</pubDate><ttl>60</ttl><item><title>Inner Class</title><link>http://www.blogjava.net/raekwon/archive/2006/09/28/72425.html</link><dc:creator>raekwon</dc:creator><author>raekwon</author><pubDate>Wed, 27 Sep 2006 18:04:00 GMT</pubDate><guid>http://www.blogjava.net/raekwon/archive/2006/09/28/72425.html</guid><wfw:comment>http://www.blogjava.net/raekwon/comments/72425.html</wfw:comment><comments>http://www.blogjava.net/raekwon/archive/2006/09/28/72425.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/raekwon/comments/commentRss/72425.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/raekwon/services/trackbacks/72425.html</trackback:ping><description><![CDATA[
		<font size="3">
				<span lang="EN-US">
						<font face="Times New Roman">
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<font size="3">
												<span lang="EN-US">
														<font face="Times New Roman">Inner Class </font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman">即嵌套类，也即</span>
												<span lang="EN-US">
														<font face="Times New Roman">C++</font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman">和</span>
												<span lang="EN-US">
														<font face="Times New Roman">C#</font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman">中的</span>
												<span lang="EN-US">
														<font face="Times New Roman">Nested Class</font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman">。但</span>
												<span lang="EN-US">
														<font face="Times New Roman">Java </font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman">的</span>
												<span lang="EN-US">
														<font face="Times New Roman">Inner Class </font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman">与</span>
												<font face="Times New Roman">
														<span lang="EN-US">C++</span>
												</font>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman">和</span>
												<span lang="EN-US">
														<font face="Times New Roman">C#</font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman">最大的不同之处在于，嵌套类包含一个指向其容器类的引用，可以访问容器类的成员。以下代码演示了这一点：</span>
										</font>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">public class Container { 
<p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"></p></font>
												</font>
										</span>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-spacerun: yes">    </span>String Name; 
<p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"></p></font>
												</font>
										</span>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-spacerun: yes">    </span>class InnerClass 
<p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"></p></font>
												</font>
										</span>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-spacerun: yes">    </span>{ 
<p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"></p></font>
												</font>
										</span>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-spacerun: yes">        </span>InnerClass(){}; 
<p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"></p></font>
												</font>
										</span>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-spacerun: yes">        </span>public void func() 
<p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"></p></font>
												</font>
										</span>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-spacerun: yes">        </span>{ 
<p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"></p></font>
												</font>
										</span>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-spacerun: yes">            </span>System.out.println(Name); 
<p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"></p></font>
												</font>
										</span>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-spacerun: yes">        </span>} 
<p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"></p></font>
												</font>
										</span>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-spacerun: yes">    </span>} 
<p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"></p></font>
												</font>
										</span>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
										<span lang="EN-US">
												<font face="Times New Roman" size="3">public Container(String name){</font>
										</span>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-tab-count: 1">       </span>Name=name; 
<p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"></p></font>
												</font>
										</span>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-spacerun: yes">        </span>InnerClass a=new InnerClass(); 
<p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"></p></font>
												</font>
										</span>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-spacerun: yes">    </span>} 
<p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"></p></font>
												</font>
										</span>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-spacerun: yes">    </span>public static void main(String [] arg) 
<p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"></p></font>
												</font>
										</span>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-spacerun: yes">    </span>{ 
<p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"></p></font>
												</font>
										</span>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-spacerun: yes">        </span>Container a=new Container(“ContainerA"); 
<p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"></p></font>
												</font>
										</span>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<font size="3">
												<span lang="EN-US">
														<font face="Times New Roman">
																<span style="mso-spacerun: yes">        </span>InnerClass b=a.new InnerClass();<span style="mso-spacerun: yes">   </span>//</font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意此处</span>
												<span lang="EN-US">
														<p>
														</p>
														<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
														</p>
												</span>
										</font>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<font size="3">
												<span lang="EN-US">
														<font face="Times New Roman">
																<span style="mso-spacerun: yes">        </span>InnerClass c=(new Container(“ContainerB")).new InnerClass(); //</font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本质上等价于上一句</span>
										</font>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-tab-count: 2">              </span>a.func();</font>
												</font>
										</span>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-tab-count: 2">              </span>c.func(); 
<p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"></p></font>
												</font>
										</span>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-spacerun: yes">    </span>} 
<p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"></p></font>
												</font>
										</span>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font face="Times New Roman" size="3">}</font>
										</span>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
										<font size="3">
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意其中独特的</span>
												<span lang="EN-US">
														<font face="Times New Roman">new</font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语法，在静态函数要创建一个</span>
												<span lang="EN-US">
														<font face="Times New Roman">Inner Class</font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，必须有一个其容器类的实例。如果直接</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">创建</span>
												<span lang="EN-US" style="mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">
														<p>
														</p>
														<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
														</p>
												</span>
										</font>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
										<span lang="EN-US">
												<font face="Times New Roman" size="3">InnerClass b=new InnerClass();</font>
										</span>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
												<font size="3">则会导致编译出错。</font>
										</span>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
										<font size="3">
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而在</span>
												<span lang="EN-US">
														<font face="Times New Roman">Container</font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的构造函数中，创建</span>
												<span lang="EN-US">
														<font face="Times New Roman">InnerClass</font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时，自动将</span>
												<span lang="EN-US">
														<font face="Times New Roman">this</font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">作为</span>
												<span lang="EN-US">
														<font face="Times New Roman">InnerClass</font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的引用。</span>
										</font>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<font size="3">
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
												<span lang="EN-US">
														<font face="Times New Roman">Inner Class </font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中使用容器类的成员，不需指定实例，自动指向创建它的容器类。</span>
										</font>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<font size="3">
												<span lang="EN-US">
														<span style="mso-tab-count: 1">
																<font face="Times New Roman">       </font>
														</span>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这是一个很有用的语法特征，编译器替我们省了许多事。</span>
										</font>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<font size="3">
												<span lang="EN-US">
														<span style="mso-tab-count: 1">
																<font face="Times New Roman">       </font>
														</span>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本例的输出是：</span>
										</font>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-tab-count: 1">       </span>ContainerA</font>
												</font>
										</span>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<font size="3">
														<font face="Times New Roman">
																<span style="mso-tab-count: 1">       </span>ContainerB</font>
												</font>
										</span>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<span lang="EN-US">
												<span style="mso-tab-count: 1">
														<font face="Times New Roman" size="3">       </font>
												</span>
										</span>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
										<font size="3">
												<span lang="EN-US">
														<span style="mso-tab-count: 1">
																<font face="Times New Roman">       </font>
														</span>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还可以看到，</span>
												<span lang="EN-US">
														<font face="Times New Roman">Inner Class </font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以访问容器类的任何成员，不管是</span>
												<span lang="EN-US">
														<font face="Times New Roman">public</font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
												<span lang="EN-US">
														<font face="Times New Roman">private</font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span>
												<span lang="EN-US">
														<font face="Times New Roman">protected</font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的成员全是透明的。反之则不然，容器类只能访问</span>
												<span lang="EN-US">
														<font face="Times New Roman">Inner Class</font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
												<span lang="EN-US">
														<font face="Times New Roman">public</font>
												</span>
												<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">成员。</span>
										</font>
								</p>
								<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
								</p>
						</font>
				</span>
		</font>
<img src ="http://www.blogjava.net/raekwon/aggbug/72425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/raekwon/" target="_blank">raekwon</a> 2006-09-28 02:04 <a href="http://www.blogjava.net/raekwon/archive/2006/09/28/72425.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>