java的内部类

参考博客:

内部类测试类,如下:

package com.ming.interview.inner;

import com.ming.interview.inner.Outer.Inner;

/**
 * @ClassName: Outer
 * @Description: TODO(外部类和内部类、静态内部类)
 * @author lenovo
 * @date 2020年6月15日
 *
 */

/*
 * 总结:
 * 1.内部类不能有静态成员变量、静态方法、静态代码块等,通过查看jvm类加载的过程不难理解这个问题:
 * 在类加载的时候,静态属性和代码块会先加载,那么按照这个逻辑,非静态内部类里面的静态属性也要优先于这个内部类加载,但这个时候这个内部类都还没有初始化,这就出现矛盾了。
 * 2.【外部类属性、方法访问修饰符】和【内部类类、属性、方法访问修饰符】只针对外部类之外的其他类,在当前外部类和内部类不起作用【外部类和内部类看成一个整体,内部类属于外部类的一部分,相互没有访问限制的】
 * 3.静态类内部不可以访问外部类的实例成员,只能访问外部类的类成员
 */
public class Outer {
	private String name;
	
	/*
	 * 外部类私有方法
	 */
	private static void get() {
		System.out.println("外部类私有方法");
	}
	
	/*
	 * 外部类私有静态方法
	 */
	private static void getStatic() {
		System.out.println("外部类私有静态方法");
	}
	
	/*
	 * 外部类调用内部类私有方法
	 */
	public void processInnerGet() {
		new Inner().get();
	}
	
	/*
	 * 内部类
	 */
	class Inner {
		/*
		 * 内部类私有方法
		 */
		private void get() {
			System.out.println("内部类私有方法" + name);
		}
		
		/*
		 * 内部类调用外部类私有方法
		 */
		private void processOuterGet() {
			new Outer().get();
		}
		
		/*
		 * 内部类调用外部类私有静态方法
		 */
		private void processOuterGetStatic() {
			Outer.getStatic();
		}
	}
	
	
	/*
	 * 外部类调用静态内部类静态方法
	 */
	public static void processInnerStaticGetStatic() {
		InnerStatic.getStatic();
	}
	
	/*
	 * 外部类调用静态内部类非静态方法
	 */
	public static void processInnerStaticGet() {
		new InnerStatic().get();
	}
	
	/*
	 * 静态内部类
	 */
	static class InnerStatic {
		/*
		 * 私有静态方法
		 */
		private static void getStatic() {
			System.out.println("静态内部类私有静态方法");
			
			//静态类内部不可以访问外部类的实例成员,只能访问外部类的类成员
			System.out.println("静态内部类私有静态方法" + name);
		}
		
		/*
		 * 静态方法
		 */
		private void get() {
			System.out.println("静态内部类私有非静态方法");
			
			//静态类内部不可以访问外部类的实例成员,只能访问外部类的类成员
			System.out.println("静态内部类私有静态方法" + name);
		}
		
	}
	
	
	/*
	 * 私有内部类
	 */
	private class InnerProtecet {
		
	}
}


class Outer1 {
	
	public void test() {
		Outer outer = new Outer();
		//创建内部类对象方式一
		Outer.Inner inner1 = outer.new Inner();
		//创建内部类对象方式二
		Outer.Inner inner2 = new Outer().new Inner();
		
		//创建私有内部类对象:其他类无法创建私有内部类对象
		outer.new InnerProtecet();
		
		//内部类的私有方法get()只能在内部类或其对应的外部类中访问
		inner1.get();
		
		//静态内部类的私有静态方法getStatic()只能在内部类或其对应的外部类中访问
		Outer.InnerStatic.getStatic();
	}
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值