什么是内部类
顾名思义就是把类放在某个范围的内部
- 类可以放在包中
- 类可以放在文件中,.java文件
- 类可以放在类中(类里套类) (内部类)
- 类可以放在方法中(方法中套类) (内部类)
类中放置内部类
-
要使用内部类就需要在外部类中实例化内部类的对象,然后用对象打点调用内部类中的方法(可以在外部类中,调用内部类的私有属性和方法)
-
通过内部类里的方法来操作内部类的数据
-
在内部类中可以直接使用外部类中的所有属性和方法
-
要使用内部类可以在外部类的外面实例化内部类的对象
然后通过对象打点调用内部类的非私有的方法(同一个包内)
方法里套类:
- 要使用方法中的内部类就必须在方法中,内部类定义的下面实例化内部类的对象,然后通过内部类的对象打点调用内部类中的方法和属性(包含私有的)
- 内部类的作用域仅限于当前方法
- 从内部类定义开始到结束,内部类的作用域就消失了
- 在内部类中可以直接使用外部类中的属性和当前方法中的局部变量
- 在外部类的外部不能使用外部类的方法中的内部类
InnerClass cannot be resolved to a tyoe
InnerClass 没有被定义
匿名内部类:(以上两种内部类的变种)
是内部类,没有类名,但有 {属性和方法}
比如
//Person 接口
//匿名内部类有对象名
Person p=new Person(){
public void study(){
//方法体
}
public void eat(){
//方法体
}
};
p.study();
p.eat();
//匿名内部类但没有对象名
new Person(){
public void study(){
//方法体
}
public void eat(){
//方法体
}
}.study();
匿名内部类的特点
- 当前匿名内部类中实现的方法只能实现一次
- 如果还想要其他的实现,就必须用匿名内部类重新new实现
- 匿名内部类更适合提供长辈方法的实现
- 而且实现只需要实现一次即可
匿名内部类和有名内部类的区别
- 匿名内部类的方法只能实现一次,对象也只有一个
- 而有名内部类也是实现一次,但可以new很多的对象