JAVA学习心得——详述有名内部类与匿名内部类

内部类是指一个外部类内定义的类。内部类分为有名内部类和匿名内部类。
1、有名内部类:有类名的内部类。

	public class Boby{
		class Heart{
			void move (){
			System.out.println("正在跳动......");
			}
		}//heart就是一个有名内部类,这个类名是“heart”。
	}

关于有名内部类很简单不在赘述。


2、匿名内部类:没有类名的内部类。
同包的其中一个Body类:

	public  class Body {
		 public void move() {
			  System.out.println("爬行......");
			  }
	}

注意:因为匿名类没有类名,无法在后续程序创建对象,所以需要在创建类时一起创建对象。

匿名内部类的方法:
new 父类构造器([参数列表])|接口(){
};

	public class Heart{
		 Body body1 =new Body() {
   			@Override
   			public void move() {
   				 System.out.println("跳动......");
  			 }
 		 };//匿名内部类的例子。
	}

注意到匿名内部类中需要重写普通类(Body)的方法,所以匿名内部类(Heart)是普通类(Body)的子类。
如果将父类(Body)改为抽象类,此时发现如果父类(Body)中有两个抽象方法,匿名类只重写一个抽象方法时,匿名内部类会报错,又因为匿名内部类无法被继承,符合抽象类的子类中必须有一个子类完全重写了抽象类的全部方法。所以匿名内部类也是抽象类的子类。
在这里插入图片描述
在这里插入图片描述

因为抽象类中所有方法都是抽象方法,那么这个抽象类就是一个接口(interface)非常简单可以知道,匿名内部类是接口的实现类。
在这里插入图片描述
在这里插入图片描述
**思考:**上边说了,匿名类无法被继承,那么为什么不可以被继承?如果可以是抽象类,则该匿名类必须有子类,但是由于没有名字,所以没有子类,也就不能被继承。
**总结:**javac会给内部类生成一个独立class文件,编译之后,会生成一个被编译成独立的.class文件。
在这里插入图片描述
如图上图所示:
有名内部类命名:外部类名$内部类名.class

匿名内部类命名:外部类名$数字.class

访问权限:

作用:访问权限用于限制成员变量或方法能否在另一个类中被使用

1、外部类或外部接口 public 默认的;但是直接在类中定义的内部类,可以有public protected dafult private

2、如果在内部类中使用局部变量的值,则:JDK8.0及+可以不适用final修饰,8.0以前必须使用fianl

public void eat( String name) {//由于我使用的是JDK8.0+所以不需要+final修饰
  class Heart{
   {
    System.out.println(name);
     }
	  }
   }

3、 由于局部变量已经被限定,所以局部变量不能使用访问权限。

4、private修饰的成员变量可以在内部类中使用,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值