java内部类之成员内部类

内部类概念:顾名思义,就是将一个类定义在另一个个类内部。内部的类称之为内部类 。

内部类的主要特点:
1.内部类可以很好的实现隐藏,可以使用protected、private修饰符。
2.内部类可以直接访问外部类的所有成员,包括私有成员
3.外部类不能直接访问内部类的成员,必须首先要建立内部类的对象才可以访问。
4.内部类可以解决一些问题,比如间接地实现继承。可以避免修改接口而实现同一个类
中两种同名方法的调用

内部类有四种:

成员内部类,静态内部类,匿名内部类,局部内部类

起名字时,$符号是合法字符,是为内部类准备的

成员的内部类特点:
1.成员内部类属于外部类的实例成员,成员内部类可以有public,private,default,
protected权限修饰符。在成员内部类中访问外部类的成员方法和属性,要使用“外部
类名.this.成员方法”和“外部类名.this.成员属性”的形式。
2.创建成员内部类的实例使用“外部类名.内部类名 实例名=外部类实例名.new 内部
类构造方法(参数)”的形式。
成员内部类的限制:
1.成员内部类不能与外部类重名
2.不能在成员内部类中定义static属性、方法和类(static final形式的乘凉定义除外)因
为一个成员内部类实例必然与一个外部类实例关联,static成员完全可以移到其外部类
去。

public class MemberInnerClassDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Outer1 outer1 = new Outer1();
		Outer1.Inner1 inner1 = outer1.new Inner1();
		outer1.outer();
		inner1.inner();
	}

}

class Outer1{
	private String name = "张三";
	private int num1 = 1;

	public void outer() {
		System.out.println(name+" "+num1);
		//System.out.println(num2);外部类不能直接访问内部类成员
		Inner1 inner1 = new Inner1();//外部类可以实例化内部类,访问内部类
		inner1.inner();
	}
	
	class Inner1{//如果内部类声明为private类型,则外部无法访问通过外部类内部类
		private String name = "李四";
		private int num2 = 2;
		//private static final int num3 = 3;在成员内部类中可以声明静态常量
		//private static int num3 = 3;在成员内部类中不能声明静态成员,包括属性和方法
		public void inner() {
			System.out.println(name+" "+num2);
			System.out.println(Outer1.this.name+" "+Outer1.this.num1);//内部类调用外部类属性
			outer();//内部类可以直接访问外部类的属性和方法,包括私有的
			Outer1.this.outer();//和上面的一样,区别是如果内部类出现重名,那么这样可以解决
		}
	}
}

  

原文地址:https://www.cnblogs.com/liubing2018/p/8450297.html