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

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值