黑马程序员_Java面对对象——(匿名)内部类

------- android培训java培训、期待与您交流! ----------

一、Java内部类概述

         内部类的概念

                所谓的Java内部类就是在类中再重新定义一个类,重新定义的类就被称为内部类。

         内部类的特点:

          1.        内部类可以直接访问外部类的中的成员,包括私有成员,因为内部类持有一个外部类的引用,格式为外部类名.this

          2.        外部类访问内部类成员,必须创建内部类对象才可以访问。

         什么时候创建内部类?

              内部类一般用于类的设计。

             分析事物时,如果发现该事物描述中还有事物,而且这个事物还在访问被描述事物的内容,这时就是还有的事物定义成内部类来描述。

         内部类的分类:      

         1,成员内部类(定义在方法外)
         2,静态内部类(被Static修饰)
         3,局部内部类(定义在方法内)
         4,匿名内部类(没有名字的内部类)
         共性:
         A、内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类命和$符号。
         B、内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的。

        内部类直接访问外部类成员的格式:

              外部类名.内部类名 = new 外部类对象.new 内部类对象;

        如果内部类是静态的,就相当于一个外部类。

              访问格式:    外部类名.内部类名 = new外部类对象.内部类;

       如果内部类中的成员也是静态的,可以是借使用类名访问,格式为:

         外部类名.内部类名.静态函数名;

      总结一句话就是访问内部类必须经过外部类。

      内部类的注意事项:

            1.        如果内部类的成员是静态的,那么内部类也必须是静态的。

            2.        如果内部类被定义在局部位置,也就是在外部类的函数里(包括主函数),那么内部类只能访问局部位置中被final修饰的局部变量。

        内部类示例:

class  Demo2
{
	public static void main(String[] args) 
	{
		
		Car c =new Car();
		c.show();
	}
}
//定义一个汽车类
class Car
{
	private String color;
	private String model;
	int num=3;
	
	//内部类
	class Tyre
	{
		int num = 4;
		//轮胎类有行走的方法
		void walk()
		{
			int num =5;
			//内部类可以直接访问外部类成员 默认持有一个外部类的引用
			System.out.println("行走"+num+this.num+Car.this.num);
		}
	}
	//外部类访问内部类必须创建内部类对象
	void show()
	{
		Tyre t = new Tyre();
		t.walk();
	}
}


二、匿名内部类

         匿名内部类的概述

               匿名内部类顾名思义就是名字被隐藏起来的内部类,简单的说就是没有名字。是内部类的一种简写。

               其实匿名内部类就是一个匿名子类对象,而且这个对象有点胖,也可以理解为,带内容的对象。

       定义匿名内部类的前提

              必须继承一个外部类,或者实现接口。

         匿名内部类的使用场景

当函数参数是接口类型时,而且接口中的方法不超过三个,可以用匿名内部类作为实际参数进行传递。

       匿名内部类的定义格式

              new父类或者(or)接口(){子类成员}

         匿名内部类的小练习:

class InnerClassDemo 
{
	public static void main(String[] args) 
	{
		Test.function().method();
	}
}
interface Inner	
{
	void method();
}
class Test
{
	//补充代码
	static Inner function()
	{
		return new Inner()
		{
			public void method(){}
		};
	}
}

------- android培训java培训、期待与您交流! ----------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值