java日常学习:内部类、局部内部类、匿名内部类

#java代码块


##内部类
内部类: 在一个类的内部定义另外一个类,那么另外一个类则称作为内部类 。

内部类的class文件名: 外部类$内部类.class

成员内部类:

成员内部类的访问方式:
方式一: 在外部类提供一个方法创建内部类的对象进行访问。

	方式二:在其他类中直接创建内部的对象进行访问。
				格式: 
					外部类.内部类  变量名  = new 外部类().new 内部类();
	
	注意:静态成员内部类在其他类创建对象的格式:
					外部类.内部类  变量名  =  new 外部类.内部类();

内部类的好处: 直接访问外部类的所有成员。

应用场景: 我们在描述A事物的时候,A事物内部还维护了另外一个B事物,
而且B事物还必须 要访问到A事物的成员,那么这时候我们就可以使用内部类描述B事物。

比如: 人-- 心脏 . 图形化界面编程

成员内部类要注意的细节:
1. 内部类可以直接访问外部类的所有成员。
2. 内部类与外部类存在同名的成员时, 在内部类中默认是访问内部类的成员, 可以通过"外部类.this.成员"进行指定访问外部类的成员。
3. 私有的成员内部类只能通过在外部类提供一个公共的方法进行访问。 在其他类无法访问。
4. 如果一个成员内部类定义了静态的成员,那么该类也必须使用static修饰。

疑问:为什么如果一个成员内部类定义了静态的成员,那么该类也必须使用static修饰 ???

		静态的成员变量是不依赖对象而存在的

##局部内部类

局部内部类:在一个方法内部定义的类称作为局部内部类。

局部内部类要注意的细节:
1. 如果局部内部类要访问局部变量,那么局部变量必须使用final去修饰。


##匿名内部类

匿名内部类:没有类名的内部类就称作为匿名内部类。

匿名内部类的好处: 简化书写。

匿名内部类的使用前提: 必须存在继承或者实现的关系。

注意的事项:
1. 匿名内部类只是没有类名而已,其他的一切成员都是具备的。

实现关系下的匿名内部类:

interface Dao{

	public void add();
}

class Outer{

	//实现关系下的匿名内部类
	public void show(){
		//这里创建的不是Dao接口的对象,创建的是Dao接口实现类的对象。
		new Dao(){
			
			public void add(){
				System.out.println("添加成功..");
			}
		}.add();

	}
}

##练习

/*
需求: 定义一个局部内部类继承Animal,创建对象调用run方法。
*/
abstract class Animal {
	public abstract void run();
	public abstract void sleep();
}

class Outer {
	public void print (){
		/*
		class Cat{
			public  void run(){
				System.out.println("小猫跑的快!");
			}
			public  void sleep(){
				System.out.println("小猫在睡觉!");
			}
		}
		//创建局部内部类的对象
		Cat c = new Cat();
		c.run();
		c.sleep();
		*/
		//匿名内部类只是没有类名而已,其他的一切成员都是具备的;
		//多态
		Animal a = new Animal(){   //  这里创建的并不是Animal的对象,创建的是Animal的子类对象,只不过其子类目前没有类名借用了ANimal名字而已;
			//匿名内部类的成员;
			String name;   //证明匿名内部成员是可以具备的;
			public  void run(){
				System.out.println("小猫跑的快!");
			}
			public  void sleep(){
				System.out.println("小猫在睡觉!");
			}    //在不声明变量接收的情况下,这里可以直接 .run/.sleep;
		};
		a.run();
		a.sleep();
	}
}

class Demo2
{
	public static void main(String[] args) 
	{
		new Outer().print();
	}
}

用于平时自己复习回顾,如有错误,欢迎指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值