- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
从Java嵌套类中访问外部类成员 在下面,我们看到对于B类来说他的嵌套层次是:AcessMethod-〉A-〉B,那么访问方法如下:
class B { void h() { System.out.println(h()); g(); f();}
AcessMethod和A来说对B,都是透明的,直接调用。嵌套类实例化的顺序:有外到里!AcessMethod-〉A-〉B 调用代码如下:
AcessMethod am = new AcessMethod();AcessMethod.A a = am.new A();AcessMethod.A.B b = a.new B();b.h();
这里很有意思的一点,’.new’语法产生了正确的作用域。 疑问:下面我们来看一下在B.h()中怎样调用A1.g()方法? 我们是否可以在B中调用A1.g()方法,在B.h()方法中原则上可以这样调用A1.g()但是A1没有实例化,所以这样是错误的,也就是在B中无法调用A1中的非静态方法了。 假设:如果A1.g()为static类型,那么在B中可以这样调用A1种的方法:A1.this.g(); 但是这是不可能的,因为在A1.g()不可能定义为static类型,详细看下面的问题1(问题1:在什么情况下可以定义static 方法),这是一个缺点吧,但是可以使用嵌套类来解决了。
/*** 从多层嵌套类中访问外部类的成员. “.new“语法产生了正确的作用域 */public class AcessMethod { private void f() { System.out.println(f()); } class A1 { private void g() { System.out.println(A1 - g()); } } class A { private void g() { System.out.println(g()); } class B { void h() { System.out.println(h()); g(); f(); } } } public static void main(String[] args) { AcessMethod am = new AcessMethod(); AcessMethod.A a = am.new A(); AcessMethod.A.B b = a.new B(); b.h(); }}
运行结果:h()
g()f()
问题1:在什么情况下可以定义static 方法? 只有在顶层类中定义,或者在静态内部类中定义,看下面的例子
public class Test { static void t(){} class T2{ //!错误,The method a cannot be declared static; //static methods can only be declared in a static or top level type //static void a(){} } static class T3{ static void a(){} }}
文档评论(0)