内部类与外部类之间访问总结

来源:互联网 发布:ep软件 编辑:程序博客网 时间:2024/05/16 11:02

1、内部类可以访问外部类的任何成员(直接写属性名或者方法名即可访问,实际上是通过外部类名+“.”+this+“.”+名称访问,如果是this+“.”+名称,此时访问不到外部类成员,访问的为内部类的成员)。

2、非静态内部类是不能含有静态成员的。

3、外部类中的方法访问内部类中的方法一共分为六种情况

1) 静态外部方法访问静态内部类静态方法,直接使用静态内部类名+ . +静态方法名。

2) 静态外部方法访问静态内部类非静态方法,需要创建静态内部类的实例再调用非静态方法。

3) 静态外部方法访问非静态内部类非静态方法,需要先创建外部类实例,再创建非静态内部类的实例最后调用非静态方法。

4) 非静态外部方法访问静态内部类静态方法,直接使用静态内部类名+ . +静态方法名。

5) 非静态外部方法访问静态内部类非静态方法,需要创建静态内部类的实例再调用非静态方法。

6) 非静态外部方法访问非静态内部类非静态方法,需要创建非静态内部类的实例再调用非静态方法。

测试代码如下(其中静态外部方法使用main方法方便测试输出):

public class innerClasstest {public static void main(String[] args) {staticInnerClass.staticInnerClassStaticmethod();  //静态外部方法访问静态内部类静态方法new staticInnerClass().staticInnerClassmethod();  //静态外部方法访问静态内部类非静态方法new innerClasstest().new innerClass().innerClassmethod();  //静态外部方法访问非静态内部类非静态方法System.out.println("---------------");new innerClasstest().outerMethod();}public void outerMethod() {staticInnerClass.staticInnerClassStaticmethod();  //非静态外部方法访问静态内部类静态方法new staticInnerClass().staticInnerClassmethod();  //非静态外部方法访问静态内部类非静态方法new innerClass().innerClassmethod();             //非静态外部方法访问非静态内部类非静态方法}       static class staticInnerClass{public static void staticInnerClassStaticmethod() {System.out.println("this is staticInnerClassStaticmethod");}public  void staticInnerClassmethod() {System.out.println("this is staticInnerClassmethod");}}       class innerClass{public void innerClassmethod() {System.out.println("this is innerClassmethod");}}}

代码输出结果为:


补充:

一、在外部类外部使用内部类(不推荐这么做)

1) 访问静态内部类静态方法,直接使用静态外部类名+ . +静态内部类名+ . +静态方法名。

2) 访问静态内部类非静态方法,需要创建静态内部类的实例再调用非静态方法(并且需要import内部类)。

3) 访问非静态内部类非静态方法,需要先创建外部类实例,再创建非静态内部类的实例最后调用非静态方法。

import innertest.innerClasstest.staticInnerClass;public class outerTest {public static void main(String[] args) {innerClasstest.staticInnerClass.staticInnerClassStaticmethod();//访问静态内部类静态方法new staticInnerClass().staticInnerClassmethod();//访问静态内部类非静态方法new innerClasstest().new innerClass().innerClassmethod();//访问非静态内部类非静态方法} }

二、内部类访问外部类若出现同名方法或者属性时如何区分

 1) this+.+方法或属性名称访问的内部类的方法或属性,不加this默认访问内部类方法或者属性。

 2) 外部类名+.+this+.+ 方法或属性名称访问的外部部类的方法或属性。

 3) 由此可知在内部类方法中想要返回内部类的引用时可return this,当想要返回外部类的引用可return 外部类名+.+this。

原创粉丝点击