从Java嵌套类中访问外部类成员

99999918位粉丝

99999918位粉丝

2016-02-19 12:43

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享从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(){}
   }
  }
展开更多 50%)
分享

猜你喜欢

从Java嵌套类中访问外部类成员

编程语言 网络编程
从Java嵌套类中访问外部类成员

讲解Java中如何构造内部类对象以及访问对象

编程语言 网络编程
讲解Java中如何构造内部类对象以及访问对象

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

java中关于内部类的使用详解

编程语言 网络编程
java中关于内部类的使用详解

AS2.0的私有,公有成员,类继承和as嵌套

flash教程
AS2.0的私有,公有成员,类继承和as嵌套

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

指向类成员

C语言教程 C语言函数
指向类成员

java中Properties类的使用

编程语言 网络编程
java中Properties类的使用

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Word 键盘快捷方式

 Word 键盘快捷方式

关于 HTML5 的七个传说小结

关于 HTML5 的七个传说小结
下拉加载更多内容 ↓