面试题分析:8JAVA中4种内部类详细分析

1.静态内部类:

理解方法:大家可以把静态内部类想想成一个静态方法,这样理解就容易多了。

demo:

package com.InnerClass;
/**
 *auther:fighter24h
 *email:[email protected]
 *静态内部类
 */
public class StaticClassDemo {

	public static void main(String[] args) {
//		调用静态内部类
		Demo.Inner inner = new Demo.Inner();
		inner.sayHallo();
	}
}
//静态内部类测试
class Demo
{
	public static int data = 4;
	/**
	 * 
	 * @author fighrer24h
	 *静态内部类:
	 *大家可以把静态内部类想想成一个静态方法来使用
	 */
	public static class Inner
	{
		public void sayHallo()
		{
			System.out.println("hallo");
		}
	}
}

2.成员内部类

理解方法:大家可以将成员内部类理解成成员变量,使用的时候也是按照成员变量的方式使用的

demo:

package com.InnerClass;
/**
 *auther:fighter24h
 *email:[email protected]
 */
public class MemberInnerClass {

	public static void main(String[] args) {
		MemberClassDemo mcd = new MemberClassDemo();
//		成员内部类的使用方法
		/**
		 * 将成员内部类理解成一个成员变量即可:
		 * 可以这样想:
		 * 如果对象没有外层的类没有实例化,我们是没有办法使用我们的public的成员变量的
		 * 所以,我们首先要初始化我们外层的类
		 * 然后,由于我们的“成员是一个类”,所以,我们使用的方式应该是new出来
		 * 那么应该如何new呢?既然是当成一个成员来用,当然是按照如下的方法使用了!
		 */
		mcd.new MemberClass().say();
		
//		或者
		MemberClassDemo.MemberClass inner = new MemberClassDemo().new MemberClass();
		inner.say();
	}
}
//成员内部类的定义方法
class MemberClassDemo
{
	private String message = "hallo";

	/**
	 *  @author fighter24h
	 *将成员内部类理解成一个成员变量即可!
	 */
	public class MemberClass
	{
		public void say()
		{
			System.out.println(message);
		}
	}
	public class MemberClass2
	{
		private String message = "word";
		public void say()
		{
//			此时我们访问的是 "word"
			System.out.println(message);
//			而如何访问外部类与内部类同名的变量呢?使用如下方法即可 , 此时访问的是 "hallo"
			System.out.println(MemberClassDemo.this.message);
		}
	}
}

3.局部内部类

理解:将局部内部类理解成一个局部变量即可,并且注意,局部内部类只能访问访问一个终态的变量,为什么呢?

解释如下:

(1)首先,即便是局部内部类,那也是一个类。

(2)我们的局部内部类没有初始化的时候,怎么知道局部变量的值是什么呢?这里涉及到了jvm大家不理解也没有太多的关系



package com.InnerClass;
/**
 *auther:fighter24h
 *email:[email protected]
 *局部内部类
 */
public class LocalClassDemo {

	public static void main(String[] args) {
		LocalClass lc = new LocalClass();
		lc.say();
	}
}
class LocalClass
{
	public void say()
	{
		/**
		 * 
		 * @author fighter24h
		 *局部内部类:
		 *将局部内部类理解成一个局部变量就可以了
		 *局部内部类使用较少,由于局部内部类类似于一个局部变量
		 *所以我们没有办法在外部访问到局部变量
		 */
		class Demo
		{
			public void sayWhat()
			{
				System.out.println("Local Inner Class");
			}
		}
		/**
		 * 所以,局部内部类的使用也只能是如下方法
		 */
		Demo demo = new Demo();
		demo.sayWhat();
	}
}

4.匿名内部类

理解:匿名内部类就是没有名字的内部类

使用方法:

public void method(new Father(){.....})

{


}

你可能感兴趣的:(java)