本人新手,写下自己的学习心得,给以后的我看 ,如果有什么错误,请大神指出来   




定义:内部类是指在一个外部类的内部再定义一个类。 



内部类分为:


1.成员内部类


2.局部内部类(方法内部类)


3.静态内部类(静态嵌套类)


4.匿名内部类



在这之前先说明:


优点:在于方便的访问外部类中的私有成员


缺点:程序结构混乱



使用内部类最吸引人的原因是:










开始讲解



(讲解一下成员变量和局部变量来区分一下成员和局部的不同之处



package com.liyangjr.inner;
public class InnerMethod {
	String name1 = "我是成员变量的值";// 成员属性
	public void Test() { // 成员方法
		String name1 = "我是局部变量的值";
	}
}



理解一下什么叫成员(全局),什么叫局部)





了解一下



1.成员内部类



2.局部内部类



3.静态内部类



4.匿名内部类





下面是实例



public class Outer extends Object {
    	String outerName;//成员属性
	//成员内部类    ---------->成员内部类的编译成Outer$Inner.class
	public  class Inner extends Object{
				
	}
	//静态内部类
   	public static class Inner1{
			
	}
	public  void outerMethod()
	{
		//局部内部类//内部类 方法内部类    
		 class InnerMethod{
		}	
	}
	//定义接口
	public interface PCI {	
		public void start();
}
	//匿名的内部类
	PCI p=new PCI() {
		@Override
		public void start() {			
		}	
	};
}
---------->成员内部类的编译成Outer$Inner.class
---------->局部内部类被编译成Outer$1Inner.class(注意1)






1.成员内部类





还是用代码来显示



package com.liyangjr.memberclass;

public class Outer {
	String name;
	int age;
	public void outerMethod() {
		System.out.println("outerMethod进入成功");// 外部类访问内部类的属性,需在先产生对象.属性方式来访问
		Inner i = new Inner();
		i.name = "成员内部类中的属性";
		System.out.println(i.name);

	}
	// 内部类 //成员内部类
	public class Inner {
		String name;

		public void innerMehtod() {
			name = "inner";// 成员内部类中的属性
			this.name = "inner";// 成员内部类中的属性
			Outer.this.name = "outer";// 外部类的属性
			age = 12;
			System.out.println(this.name+","+age);
		}
	}
}







测试类



package com.liyangjr.memberclass;

import com.liyangjr.memberclass.Outer.Inner;

public class Test {
	public static void main(String[] args) {
//		Outer o = new Outer();
//		Outer.Inner inner = o.new Inner();
//		inner.innerMehtod();
		Outer.Inner inn  =new Outer().new Inner();//简化
		inn.innerMehtod();
	}
}






结果  inner,12



2.局部内部类




方法内的局部内部类,它就是为这个方法来提供功能的。





package com.liyangjr.localclass;

public class Outer {
	String outerName;

	public void outerMethod() {
		// 方法内的局部内部类,它就是为这个方法来提供功能的。
		// 所以,它的调用,就是在方法内完成调用
		// 方法中变量,即局部变量
		final int methodVar = 123;
		// 内部类 方法内部类,局部内部类
		class InnerMethod {
			String outerName;

			public void innerMethod() {
				// methodVar=1;
				System.out.println(methodVar);
				outerName = "123";
				Outer.this.outerName = "123";
				System.out.println("innerMethod");
			}
		}
		// 在这里完成调用的
		InnerMethod im = new InnerMethod();
		im.innerMethod();

	}
}



测试



package com.liyangjr.localclass;

public class Test {
	public static void main(String[] args) {
		Outer o =new Outer();
		o.outerMethod();
	}

}



3.静态内部类(

嵌套类 )




static的内部类就叫做嵌套类 



另外,嵌套类还有特殊之处,就是嵌套类中可以有static方法,static字段与嵌套类,而普通内部类中不能有这些。









package com.liyangjr.staticclass;
	
	public class Outer{
		 String sex;
	     static  String  address;
	     //成员方法
	     public void outerMethod()
	     {
	    	 Inner.name="";
	    	 Inner i=new Inner(); 
	    	 i.age=2;
	     }
	     //静态内部类
	     public static class Inner{
			static String name;
			int age;
	
			public void innerMethod() {
				// Outer.this.sex="女"; //错误
				Outer.address = "静态内部类的innerMethod"; // 只能操作外部类的static 变量
				System.out.println(Outer.address);
			}
	}
}



测试



package com.liyangjr.staticclass;

public class Test {
	public static void main(String[] args) {
		Outer.Inner inner = new Outer.Inner();
		inner.innerMethod();
		
	}

}



4.匿名内部类



还没有搞清楚 ,明天继续