内部类

当一个对象A离开对象B就没有存在的意义,比如:棋子与棋盘,手机充电器与手机。

没有棋盘,棋子就没用,没有手机,充电器就没用。这个时候就可以使用内部类。

棋子类可以定义在棋盘中。

包含有内部类的类叫外部类,内部类可以访问外部类属性(除了静态内部类,因为静态内部类产生于外部类之前)。

方法级别内部类(如下前两例),可以使用方法级别的修饰符 比如:private、public等,访问策略与类方法相同。

方法级别内部类编译时产生于本类加上内部类个数的class文件


例:

静态类内部类

public class InnerClass {

	
	//静态内部类,注意其实例化。。。
	static class A{
		void doit(int a){
			System.out.println("InnerClass is working and numuber is:"+a);
		}
	}
	
	public static void main(String[] args) {
		//静态内部类实例化
		//与普通类的实例化差不多,可以吧InnerClass.A看做是一个类
		InnerClass.A a= new InnerClass.A();
		a.doit(3);
	}
}
实例内部类

public class InnerClass {

	//实例内部类,其实例化,必须先创建外部类实例,
	class B{
		void doit(){
			System.out.println("实例内部类工作");
		}
	}
	
	public static void main(String[] args) {
		
		//实例内部类,必须要有棋盘,才能有棋子
		//先实例外部类,通过外部类对象新的对象类B
		InnerClass innerClass =new InnerClass();
		InnerClass.B b=innerClass.new B();
		b.doit();
		//也可示例如下
		InnerClass.B b1=new InnerClass().new B();
		b1.doit();
	}
}

局部变量级内部类

public class InnerClass {

	
	//局部变量级内部类,属于某个方法,只在方法内有效,不能使用任何访问修饰符,就跟局部变量一样。
	void method(){
		class C{
			void doit(){
				System.out.println("局部变量级内部类");
			}
		}
		//调用该类(只能在方法中使用)
		C c = new C();
		c.doit();
	}
	
	public static void main(String[] args) {
			
		InnerClass innerClass1 =new InnerClass();
		innerClass1.method();
	}
}
这个写法也会产生新的class文件

但这个写法几乎没人用,只有一些职业笔试面试时好像会问到。


匿名内部类

我们给类起名是为了什么?

为了可以使用这个类名创建多个实例,可是如果只需要一个实例呢?不就是不起名,直接用就好。

于是匿名内部类产生,匿名类需继承于一个已有的父类或实现一个接口。

其实质是

class ??? extends XXXClass(){
			
	//???(无名类)实现或重写XXXClass方法、或些自己的方法

}

定义一个无名的类继承或实现一个已有类,重写或实现父类方法、或写自己的方法。

之后就简化成

new XXXClass(){
      //方法
}
实现代码如下
public class AnonymousClass {

	public void method(){
		System.out.println("method类使用");
	}
	
	public static void main(String[] args) {

		//匿名类也有构造方法,默认是调用父类无参构造方法,若父类没有无参构造方法,则报错
		//使用父类方法
		new AnonymousClass(){
			
		}.method();
		//重写父类方法
		new AnonymousClass(){
			@Override
			public void method() {
				System.out.println("ss");
			};
		}.method();
		//实现自己方法
		new AnonymousClass(){	
			void me(){
				System.out.println("sfsf");
			}
		}.me();
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值