2017-10-28 83 views
1

我正在学习java中的内部类。我已经看到,如果内部类是非静态的,那么它可以轻松访问外部类变量。但是如果内部类是静态的,那么如何使用静态的类对象来访问外部类的变量呢?如何使用内部静态类对象访问外部类变量

下面是我的代码,其中是从内部类访问外部类变量

package org; 

public class Outerclass { 

    String name = "Europe"; 

    public String getname() { 

     return name; 
    } 

    public void setname(String name) { 

     this.name = name; 
     System.out.println(this.name); 
    } 

    static class innerclass { 

     void updatename() { 
      Outerclass o = new Outerclass(); 
      o.setname("USA"); 
     } 

    } 

    public static void main(String[] args) { 
     Outerclass b = new Outerclass(); 
     b.name; // why this error here ? "Syntax error, insert "VariableDeclarators" to complete LocalVariableDeclaration" 

     innerclass i = new innerclass(); 
     i.updatename(); 

    } 

} 
+2

而不是向我们展示*如何*你试图做些什么(和失败)为什么你不解释*你试图达到什么样的目标? – alfasin

回答

2

您不能访问静态内容

内非静态的内容,当我们创建默认静态内部类它将创建为外部模板作为内部模板的关联。所以我们可以加载在一起,但只有静态的东西可以在静态的内部类中。

现在这些类的对象之间没有连接。但是模板之间有联系。

以下是你的代码中,我已经做了一些修改可能会帮助你

public class Demo { 

    String name = "Europe"; 

    public String getname() { 

     return name; 
    } 

    public void setname(String name) { 

     this.name = name; 
     System.out.println(this.name); 
    } 

    static class innerclass { 

     void updatename() { 
      Demo o = new Demo(); 
      o.setname("USA"); 
     } 

    } 

    public static void main(String[] args) { 
     Demo b = new Demo(); 
     String a = b.name; // why this error here ? "Syntax error, insert "VariableDeclarators" to complete LocalVariableDeclaration" 

     System.out.println(a); 

     innerclass i = new innerclass(); 
     i.updatename(); 

    } 

} 
+0

如果外部类的变量是静态的,该怎么办? – Javastudent

+0

等待我正在编辑我的回答详情 –

+0

可以访问静态东西 –

0

内部静态类 behives一样正常类:

  • 可以访问外部类
  • 的静态属性/方法
  • 不能直接访问outre类的非访问静态/方法,它们将需要一个外部类实例引用来执行此操作。
  • 它不主要是在两种情况 rquire要创建

它用于外部类的一个实例:

  • 要创建一组具有类似性质/功能类,并且要将它们放在一个'Napespace'
  • 中,您希望创建一个不会被任何人看到的私有类,除了类(私有静态内部类)外。这样您就可以创建仅可用于外部类的接口实现。

非静态内部类:

  • 它需要外部类的实例被创建
  • 它可以访问的方法和外类的属性。

Quote

...内部类可以访问声明类的所有成员,甚至 私有成员。实际上,内部班级本身据说是该班级的一名成员 ;因此,遵循面向对象的规则 工程,它应该有权访问该类的所有成员。

+0

如果外部类的变量是静态的呢? – Javastudent

+0

您可以访问它们 – Beri

+0

@Beri关于'无法直接访问outre类的静态/方法,它们将需要外部实例引用来执行此操作。我认为你可以在没有外部类的实例的情况下访问静态方法。 –