欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java海洋,

来源: javaer 分享于  点击 7526 次 点评:85

java海洋,


直接通过一个小程序开始吧!
package all;
/**
*
* @空谷悠悠
*
*/
public class InnerTest {


public void hello(){
System.out.println("say hello to you !");
}
public static void main(String[] args) {
InnerTest in = new InnerTest();
InnerTest.Base b = in.new SubBase ();
System.out.println("b.x="+b.x);
System.out.println("b.method="+b.method());
InnerTest.SubBase sb = in.new SubBase();
System.out.println("b.x="+sb.x);
System.out.println("b.method="+sb.method());
}
public class Base{
int x = 2;
int method(){
InnerTest.this.hello();
return x;
}
}
public class SubBase extends Base{
int x = 3;
int method(){
InnerTest.this.hello();
return x;
}
}
}
输出结果为:
b.x=2
say hello to you !
b.method=3
sb.x=3
say hello to you !
sb.method=3

开始我们的问题吧。我们可以清楚的看到内部类是可以的继承的,但是你注意到b.x和sb.x的结果差异吗?为什么同样调用method结果却没有区别啊?thinking in java中对这个问题做了详细的讲解----导出类能够覆盖基类的非final成员,而对于final成员无可奈何。我们知道基类的字段是默认final的。所以此处subBase不能覆盖掉Base中的x。另外导出类SubBase对基类的引用也是影藏的。
在内部类中怎么使用外部类的方法呢?当然得先拿到外部类的引用,即外部类+this
怎么生成内部类的对象呢?InnerTest in = new InnerTest();
InnerTest.Base b = in.new SubBase ();
即外部类引用+new

相关文章

    暂无相关文章
相关栏目:

用户点评