【JAVA基础】-内部类

一.内部类

定义:内部类是指在一个外部类的内部在定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在。内部类可以为静态,可以用protected和private修饰

为什么要用内部类:

每个内部类都能独立的继承自一个接口的实现,无论外围类是否已经继承了某个实现,对应内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象类的能力,一些设计与编程问题就很难解决。

根据位置的不同,JAVA中的内部类分为四种:

1. 静态内部类:

1)使用static修饰,声明在类体中

2)静态内部类中可以访问外部类的静态成员

2.成员内部类

1)声明在类体中,不使用static,具有类的成员特征,也就是,必须有类的实例才能创建内部类实例

2)内部类实例可以访问共享外部类的成员变量

3)如:链表的节点就可以定义为内部类

3.局部内部类

把类声明在方法中就是局部内部类,作用域

4.匿名内部类

1)匿名类是对原类的一个继承,同时创建了实例,{}就是继承以后的类体,类体中可以使用所有类的语法

2)匿名类不能写构造器

3)匿名类可以从抽象类或者接口继承,必须提供抽象方法的实现

内部类的访问规则:

1.      内部类可以直接方法外部类中的成员,包括私有类

之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式外部类名.this;

2.外部了要访问内部类,必须建立内部类对象

   访问格式,当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中可以直接建立内部类对象  格式:外部类名.内部类名 变量名=外部类对象.内部类对象;

 例如:Outer.Innerin=new Outer().new Inner();

3.  当内部类在成员位置上,就可以被成员修饰符所修饰。

例如,private,将内部类在外部类中进行封装

      Static:内部类就具备了static的特性。

当内部类被静态修饰后,只能直接访问外部类中的静态成员了,出现了访问局限。

在外部其他类中,如何直接访问静态内部类?

new Outer.Inner().function();

         在外部其他类中,如何直接访问static内部类的静态成员呢?

     Outer.Inner.function();

注意:当内部类中定义了静态成员,该内部类必须是静态的。

当外部类中的静态方法访问内部类时,内部类也必须是静态的

 

当描述事物时,事物的内部还有事物,该事物用内部类来描述,因为内部事物在使用外部事物中的内容。

 

注意:内部类定义在局部时:

1.      不可以被成员修饰符修饰

2.      可以直接访问外部类中的成员,因为还持有外部类中的引用。

但是不可访问它所在局部中的变量,只能访问被final修饰的局部变量。

abstract class AbsDemo
{
	abstract void show();
}
class Outer
{
	int x=3;
	/*class Inner extends AbsDemo
	{
		void show()
		{
			System.out.println("show:"+x);
		}
	}
	*/
	public void funcation()
	{
		//new Inner().show();


		new AbsDemo()  //AbsDemo的匿名子对象相当于new Inner().show()
		{
			void show()
		   {
			System.out.println("x:"+x);
		   }
		}.show();
	}
	

}
class InnerClassDemo3 
{
	public static void main(String[] args) 
	{
		Outer out=new Outer();
		out.funcation();
	}
}


匿名内部类其实就是内部类的简写格式。

定义匿名内部类的前提:

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

3.      匿名内部类的格式: new 父类或者接口(){定义子类的内容}

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

5.      匿名内部类中定义的方法最好不要超过3个。          

6.      什么时候使用匿名对象类:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值