JAVA面试——内部类

定义在类内部的类称为内部类。内部类根据不同的定义方式,可分为静态内部类/成员内部类/局部内部类和匿名内部类。

静态内部类

	定义在类内部的静态类成为静态内部类。静态内部类可以访问外部类的静态变量和方法;在静态内部类中可以定义
静态变量/方法/构造函数等;静态内部类通过“外部类.静态内部类”的方式调用。
	public class OuterClass{
		private static String className = "StaticInnerClass";
		public static class StaticInnerClass{
			public void getClassName(){
				System.out.println("className:"+className);
			}
		}
		public static void main(String[]args){
			OuterClass.StaticInnerClass InnerClass = new OuterClass.StaticInnerClass();
			InnerClass.getClassName();
		}
	}
  • Java集合类HashMap在内部维护了一个静态内部类Node数组用于存放元素,对使用者是透明的。这种和外部类关系密切且不依赖外部类实例的类,可以使用静态内部类实现。

成员内部类

	定义在类内部的非静态类叫做成员内部类,在成员内部类中不能定义静态方法和变量(final修饰的除外),因为成员内部类都是非静态的,
而在JAVA的非静态代码块中不能定义静态方法和变量。
	public class OutClass{
		private static int a;
		private int b;
		//定义一个成员内部类
		public class MemberInnerClass{
			public void print(){
				System.out.println(a);
				System.out.println(b);
			}
		}
		//使用方式跟静态内部类相同
	}

局部内部类

	 定义在方法中的类叫做局部内部类。当一个类只需要在某个方法中使用某个特定的类时,可以通过局部类来优雅的实现。
public class OutClass{
		private static int a;
		private int b;
		public void partClassTest(final int c){
			final int d = 1;
			// 在方法中定义一个局部内部类
			class PastClass{
				public void print(){
					System.out.println(c);
				}
			}
		}
	}

匿名内部类

	匿名内部类指通过继承一个父类或者实现一个接口的方法直接定义并使用的类。匿名内部类没有class关键字,
这是因为匿名内部类直接使用new生成一个对象的引用。
	public abstract class Worker{
		private String name;
		public String getName(){ return name; }
		public void SetName(String name){this.name = name;}
		public abstract int workTime();
	}
	public void Test {
		public void test(Worker worker){
			System.out.println(worker.getName()+"工作时间"+worker.workTime());
		}
		public static void main(String[]args){
			Test test = new Test();
			//在方法中使用匿名内部类
			test.test(new Worker(){
				public int workTime(){
					return 8;
				}
				public String getName(){
					return "apex";
				}
			});
		}
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值