Java入门 ----第八弹

来由:我们希望定义一个类可以访问另一个类里面的私有成员。

一、内部类(第一种形式):定义在一个类内部的类。
1)内部类拥有访问外部类所有成员的权限(包括私有成员)。
2)外部类可不可以直接访问内部类的成员?(需要通过内部类的对象来访问)
3)内部类可以看成是一个成员类,所以成员变量和成员方法所具有的属性,内部类同样具有。
4)定义在类的内部的类,编译后会不会生成.class文件?
5)在内部类中,如何访问内部类自身对象和外部类的对象?
6)内部类同样可以用static来修饰。
非静态的内部类:属于外部类的对象的成员。
静态的内部类:静态内部类是在创建外部类的时候初始化
静态内部类只能访问静态的外部类成员。
静态的方法只能访问静态的成员,静态的内部类也是如此。
//其他类如何调用内部类中的方法?
Shop.Girl sg = new Shop().new Girl();
sg.eat();

问:如何去访问一个类中的私有成员?
1. 内部类
2. 封装
3. 反射

二、内部类(第二种形式):
定义在方法内部的类也是内部类。
如何创建内部类的对象?能和第一种形式一样吗?
1)定义在方法内的内部类,编译后生成的.class文件又是什么形式的?
2)方法调用完毕,内部类的类对象是否还存在?
JDK1.8版本 定义在方法内部的内部类可以直接访问外部类的变量(成员变量、局部变量)
3)定义在方法内部的内部类访问外部类的非成员变量时,要用final修饰。why?
实例变量、对象、数组驻留在堆上
局部变量、成员方法驻留在栈上,它只存在于方法的生命期内,调用方法结束,栈结构就被删除,所以无法保证局部变量的存活期和堆中的对象一样长。
4)能够应用于方法内部类的修饰符有哪些?abstract和final。
5)在静态方法内声明的内部类只能访问外部类的静态成员。
第一种形式的内部类和第二种形式的内部类有哪些细微的区别:

三、匿名类:匿名内部类,一个没有指定名字的内部类。
匿名类能否产生.class文件?又是怎样表示的?
语法: new 父类名()
{
匿名类的实现
}
注:父类必须是一个已知类(接口、抽象类、普通类)。
若父类是接口,那么这个匿名类就实现了这个接口。
若父类是抽象类或普通类,那么这个匿名类就继承了这个抽象类或普通类。
匿名内部类永远是作为一条语句的一部分创建,因此,不要忘记在该类定义之后使用大括号关闭该语句。
匿名内部类不能扩展一个类,或实现一个(多个)接口。
使用内部类的目的:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值