黑马程序员------------------匿名内部类

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

内部类:在一个类中又声明了一个类 

class A {  //外部类

            class B {  //内部类

    }

}

1.常规用法

public class Demo13 {
	public static void main(String[] args) {
		Father2 f = new Son1();
		f.show();
		//f.print();//此处不能调用父类中没有声明而子类中特有的方法
	}
}

class Father2 {
	void show() {
		System.out.println("father.show");
	}
}

class Son1 extends Father2 {
	void show() {
		System.out.println("son.show");
	}
	void print(){
		System.out.println("son.print");
	}
}


2.用匿名类创建对象

public class Demo13 {

	public static void main(String[] args) {
		/*
		 * 使用内部类创建对象
		 * 在父类基础上new一个匿名内部类赋值给父类对象
		 * 类内写方法调用
		 * */
		Father2 f = new Father2() {
			void show() {
				System.out.println("son.show");
			}	
			void print(){
				System.out.println("son.print");
			}
		};
		f.show();

//		f.print();//此处不能调用父类中没有声明而子类中特有的方法
	}
}

class Father2 {
	void show() {
		System.out.println("father.show");
	}
}


内部类有什么作用?

    内部类一般是在分析阶段.发现某一个实体是另外一个实体的不可分割的一部分.

class 人 {

         class 心脏 {

  }

         class 脑 {

  }

}

内部类的定义位置:

    1.内部类可以声明在类的成员位置上,对于这一种情况,内部类是可以使用成员修饰符的.

    2.内部类可以声明在方法内.

内部访问:  (重点)

    1.内部类声明在成员位置上 (上面的常规用法)

              对于内部类来说它可以直接访问外部类的成员.

              应用的比较多的访问方式:

                         在外部类定义方法,去访问内部类的成员

              在外部去直接访问内部类的成员

                         ①非static修饰的内部类

                                                   外部类名.内部类名  引用 = new 外部类名().new 内部类名();

                        ②static修饰的内部类

                                                   外部类名.内部类名  引用 = new 外部类.内部类();

    2.内部类定义在局部位置上(定义在方法内.例如上面的使用匿名内部类创建对象简化方式)

               只能在局部位置创建内部类的对象去访问.

               内部类在局部位置注意事项:

                            a.内部类可以直接访问外部类成员

                            b.内部类可以直接访问局部变量,局部变量必须使用final修饰

                            c.内部类中如果出现与外部类同名的成员.

                                             这个时候的this代表的是内部类对象,而要使用外部类

                                              需要   外部类名.this   这个代表的是外部类的对象

 

关于内部类声明在成员位置上时它的static修饰的问题

                            1.如果内部类使用static修饰,在内部类中就不能直接访问外部类的非static成员

                            2.如果内部类中有static成员,内部类必须使用static修饰.

                            3.如果内部类使用static修饰,那内部类的成员可以是static,也可以不是

 

内部类声明在成员位置上关于修饰符的补充:

              如果开发内部类一般会使用private,这时候只能适合我们所说的第一种方式方法

              如果是非private可是使用其他方式.

 

内部类产生的.class文件特点:

               在成员位置    外部类名$内部类名.class

               在局部位置    外部类名$序号内部类名.class

 

使用内部类的简化方式在以后的图形化界面中会经常使用.

 

 

--------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流!---------------详细请查看: http://edu.csdn.net
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值