9.Java基础知识:面向对象05
1、内部类
1.1 概念:
就是一个类定义在其他类里面的类;包含其他类的类,叫做外部类;被外部类包含的类,叫做内部类;
1.2 分类(根据书写位置分)
1.2.1 成员内部类(根据修饰符的不同分)
- 静态成员内部类:
使用static修饰的内部类就是静态成员内部类;
静态成员内部类,也和外部类的对象无关;
静态成员内部类中可以书写任何成员;
在外部类以外的类中使用静态成员内部类,和使用普通类一样,只需要在类名前添加外部类的类名;
在外部类中,不管是静态函数还是非静态函数,使用静态成员内部类的静态成员,都是直接通过类名使用;
使用静态成员内部类的非静态成员,都是通过内部类的对象使用;
创建内部类的对象,都可以直接创建,因为和外部类的对象无关;
- 非静态成员内部类:
不使用static关键字修饰的成员内部类就叫做非静态成员内部类;
非静态成员内部类,必须依赖外部类的对象存在
非静态成员内部类中,只能书写非静态成员和常量变量,不能书写静态成员(除非是常量变量)
- 私有成员内部类:
使用private关键字修饰的成员内部类就是私有成员内部类;
这里私有只是限制这个成员内部类不能在外部类之外的地方使用,其它的用法和前面讲的静态成员内部类和非静态成员内部类的用法一样;
1.2.2 局部内部类
概念:定义在局部位置(函数里面)的内部类就叫做局部内部类;
局部内部类中可以书写的成员,和非静态成员内部类一样,只能书写非静态成员,不能书写静态成员,除非是常量变量;
在外部类的静态函数中定义的局部内部类,可以直接使用外部类的静态成员,不能直接使用外部类的非静态成员,需要通过外部类的对象使用;
在外部类的非静态函数中定义的局部内部类,可以直接使用外部类的静态和非静态成员;
2、匿名内部类
2.1 匿名内部类,就是一种格式:
class A{}//表示定义一个A类
new A()//表示创建A类的一个对象
new A(){}//表示创建A类的一个匿名子类的对象,后面大括号中的内容,就是匿名子类中的内容;
interface Inter{}//表示创建了一个接口Inter
new Inter(){} //表示创建了接口Inter的一个匿名实现类的对象,后面大括号中的内容,就是匿名实现类中的内容;
2.2 示例
interface Inter{
public void show();
}
class Test{
//实际上是接受一个接口的实现类对象当作参数
public static void test(Inter in){
in.show();
}
public static void main(String[] args){
//test函数中接受了接口Inter的匿名实现类的对象
test(new Inter(){
//重写接口中的抽象函数
public void show(){
System.out.println("呵呵。。");
}
});
}
}
3、java访问权限
3.1 java中的访问权限,总共有四种:
私有的
: 使用private关键字修饰:表示被修饰的成员只能在定义他的类中使用;
默认的
: 不使用任何关键字修饰,表示这种成员可以在同一个类和同一个包中使用;
受保护的
: 使用关键字protected修饰,表示被修饰的成员可以在同一个类、同一个包和不同的包但是有继承关系的类中使用;
公开的
: 使用public关键字修饰:表示被修饰的成员可以在任意地方使用;
3.2 java访问权限表:(yes:可以访问;no:不可访问)
private(私有的) | 默认的(什么都不写) | protected(受保护的) | public(公共的 ) | |
---|---|---|---|---|
同一个类中 | yes | yes | yes | yes |
同一个包中不同类之间 | no | yes | yes | yes |
不同包中有继承关系的类 | no | no | yes | yes |
不同包中没有继承关系的类 | no | no | no | yes |
private
:私有的,最小;
public
:公开的,最大;
protected
:主要给子类用的,
默认的(包级访问权限)
:只能同一个包访问;