如何使用内部静态类对象访问外部类变量

时间:2017-10-28 16:16:14

标签: java

我正在学习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 个答案:

答案 0 :(得分:2)

您无法访问静态内容中的非静态内容

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

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

以下是您的代码我做了一些修改可能对您有所帮助

It works!
It works!
Traceback (most recent call last):
  File "/Users/*****/sqlite3_python_cc.py", line 53, in <module>
    new_data_entry()
  File "/Users/*****/sqlite3_python_cc.py", line 45, in new_data_entry
    c.execute("INSERT INTO babyName (name, gender, frequency, year) VALUES (?, ?, ?, ?)", values)
  File "/Users/*****/anaconda/lib/python3.6/site-packages/mysql/connector/cursor.py", line 529, in execute
    raise errors.ProgrammingError("Cursor is not connected")
mysql.connector.errors.ProgrammingError: Cursor is not connected

答案 1 :(得分:0)

内部静态类与普通类相同:

  • 可以访问外部类的静态属性/方法
  • 不能直接访问outre类的静态/方法,它们需要一个外部类实例引用才能这样做。
  • 它不会获取要创建的外部类的实例

主要用于两种情况

  • 您正在创建一组具有相似性质/功能的课程,并且您希望将它们保存在一个Napespace&#39;
  • 之下
  • 你想要创建一个任何人都看不到的私有类,除了outter类(私有静态内部类)。这样,您就可以创建仅对外部类可见的接口实现。

非静态内部类:

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

Quote

  

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