关于内部类的一些知识点

内部类

(1)把一个类定义在某个类中的,这个类就被称为内部类,内置类,嵌套类。
(2)访问特点:
	A:内部类可以直接访问外部类中的成员,因为内部类持有外部类的引用,
	  格式为:外部类名.this
	B:外部类要想访问内部类的成员,必须创建对象访问。
(3)内部类的访问格式:
	A:当内部类定义在外部类的成员位置,而且非私有,则可以在其他外部类中直接建立内部类对象
	  格式:外部类名.内部类名  变量名 = new 外部类对象.内部类对象
		如:Outer.Inner in = new Outer().new Inner()
	B:当内部类在外部类成员位置,且被static修饰时
		外部其他类可直接访问静态内部类的非静态成员
		  格式:new 外部类名.内部类名().内部类成员
		  如:new Outer.Inner().function();
		外部其他类可直接访问静态内部类的静态成员
		  格式:new 外部类名.内部类名.内部类成员
		  如:new Outer.Inner.function();
(4)什么使用时候内部类呢?
	假如有A类和B类,A类想直接访问B类的成员,B类访问A类成员的时候,
	需要创建A类对象进行访问,这个时候,就可以把A类定义为B类的内部类。
(5)内部类的位置
	A:成员位置
		可以被private修饰(Body,Heart)
		可以被static修饰。(它访问的外部类的成员必须是静态的)	
	B:局部位置
		可以直接访问外部类中的成员,因为还持有外部类的持用
		也可以直接访问局部成员,但是局部成员要用final修饰。	  
	注意:局部内部类不能用private和static修饰		
(6)通过class文件我们就可以区分是否带有内部类,以及内部类的位置
	Outer$Inner:成员内部类
	Outer$1Inner:局部内部类

28、匿名内部类(局部内部类的简写)

	(1)前提:继承一个类或者实现一个接口
	(注意不要弄混匿名内部类的前提和多态的前提)
	(2)格式:
		new 父类名或者接口名()
		{
			重写父类方法或者实现接口中的方法。
			也可以自定义其他方法。
		};
	(3)什么时候定义匿名内部类?
		匿名内部类只是为了简化书写,匿名内部类有局限,通常定义匿名内部类时,该类方法不超过3个
	(4)匿名内部类的好处和弊端:
		好处:简化代码书写
		弊端:
			不能直接调用自己的特有方法
			不能执行强转换动作
			如果该类里面方法较多,不允许使用匿名内部类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
匿名内部类是指在声明一个的同时实例化它,而不需要为该命名。在Java中,匿名内部类通常用于实现接口或继承抽象。 下面是一些关于匿名内部类知识点: 1. 声明匿名内部类:可以在创建对象的同时定义匿名内部类,使用new关键字后紧跟接口或抽象的定义,并重写其中的方法。例如: ```java InterfaceName obj = new InterfaceName() { // 匿名内部类的实现 // 重写接口中的方法 }; ``` 2. 实现接口:匿名内部类常用于实现接口,可以直接在创建对象时实现接口的方法,省去了单独创建一个实现的步骤。 ```java Runnable runnable = new Runnable() { @Override public void run() { // 实现Runnable接口的run方法 } }; ``` 3. 继承抽象:匿名内部类也可以继承抽象,并重写其中的抽象方法。 ```java AbstractClass obj = new AbstractClass() { @Override public void method() { // 实现抽象中的方法 } }; ``` 4. 访问外部变量:匿名内部类可以访问外部中的成员变量,但需要将其声明为final或实际上是final的(Java 8之后,如果变量未被后续代码修改,可以不显式声明为final)。 ```java int num = 10; InterfaceName obj = new InterfaceName() { @Override public void method() { System.out.println(num); // 访问外部变量 } }; ``` 需要注意的是,匿名内部类没有名称,因此无法通过名称直接创建多个对象。每次使用都需要重新定义匿名内部类。匿名内部类通常用于简单的场景,如果需要复杂的逻辑或多次使用,建议单独定义一个具名的内部类

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值