JAVA基础(58)---内部类

版权声明:如需转载请标明出处 https://blog.csdn.net/yj201711/article/details/84172605

内部类

指的是定义在类的内部的类。

成员内部类

定义在类的内部,方法的外部的内部类,称为成员内部类

局部内部类

指的是定义在方法内的内部类,称为局部内部类。       

内部类的定义形式

                                                   class{
                                                            class{
           
                                                              }
                                                   }   

思考问题

       ①如何创建内部类的对象?
        外部类类名.内部类类名  对象名称  = new 外部类().new 内部类();
        要产生内部类,首先需要产生外部类(内部类是外部类的一个成员,对于成员的访问我们都需要对象)

       ②对于包含了内部类的类,编译之后,会产生几个.class字节码文件?
          产生两个字节码文件
          内部类的字节码文件的名称为 外部类$内部类.class

      ③ 内部类能否访问外部类的私有的成员属性? 可以
           内部类的构成和普通类的构成是一样,而且内部类能直接访问外部类的成员,包括私有的成员

      ④ 内部类能否使用private  public  protected进行修饰
            可以。但是内部类使用private修饰之后,在其他类中访问是不方便的

      ⑤对于内部类中声明的变量,类似于外部类中的局部变量,只能在内部类中使用,而不能在外部类中使用。

      ⑥局部内部类不能在外部产生该内部类的对象,要产生该局部内部类的对象,只能在方法内部产生。但是对于局部内部类编译之后也会产生两个clas字节码文件。对于局部内部类,要想使用方法的局部变量,那么该变量一定是 final。jdk8 会自动为该变量添加 final 修饰

public class OutterClass {	
	private int num  = 10;
	private OutterClass.innerClass ic;
	
	public OutterClass() {
		
		System.out.println("outterclass  构造方法");
	}
	public void printInfo() {
		System.out.println(num );
		
	}
	
	
	private class innerClass{//成员内部类
		int a = 100;
		
		public innerClass() {
			System.out.println("innerClass  构造方法");
			
		}
		public void show() {
			num = 200;
			System.out.println(num);
			printInfo();
		}
		
	}
	
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	
	public OutterClass.innerClass getIc() {
		return ic;
	}
	public void setIc() {
		this.ic = new OutterClass().new innerClass();;
	}
	public static void main(String[] args) {
		OutterClass  oc = new OutterClass();
		OutterClass.innerClass ic = new OutterClass().new innerClass();
		System.out.println(oc);
		System.out.println(ic);
		System.out.println("-----------------------");
		ic.show();
	}
}
public class OutterClass2 {
	
	public void test() {
		
		final int num = 20;
		
		class methodInnerClass{
			public void show2() {
				System.out.println(num);
			}
			
		}
		methodInnerClass mc = new methodInnerClass();
		mc.show2();
		
	}
	
	public void demo() {

		
		
	}
	public static void main(String[] args) {
		OutterClass2 oc2 =new OutterClass2();
		oc2.test();
		
	}
}
public class Test {
	public static void main(String[] args) {
		OutterClass oc = new OutterClass();
		oc.setIc();
		Object obj = oc.getIc();
		System.out.println(obj);
	}
}


                
       

猜你喜欢

转载自blog.csdn.net/yj201711/article/details/84172605