内部类:
如果一个事物的内部包含另一个事物,那么就是一个类内部包含另一个类
1.成员内部类
2.局部内部类(包含匿名内部类)
内用外,随意访问;外用内,需要内部类对象
如何使用成员内部类:
1.间接方式:在外部类的方法中,使用内部类,然后main只是调用外部类的方法
2.直接方式:公式:
外部类名称.内部类名称 对象名 = new 外部类名称.new 内部类名称();
如果出现重名现象,使用外部类名称.this.外部类成员变量名
如果接口的实现类(或是父类的子类)只需要使用唯一的一次
那么可以省略该类的定义,使用【匿名内部类】
格式:
接口名称 对象名 = new 接口名称(){
//覆盖重写接口中所有抽象方法
};
注意:
1.匿名内部类,在【创建对象】时,只能使用唯一一次
如果希望多次创建对象,且类内容一样,则必须使用单独定义的实现类
2.匿名对象,在【调用方法】时,只能调用唯一一次
如果希望同一对象,多次调用方法,则必须给对象起个名字
3.匿名内部类是省略的【实现类/子类】,匿名对象是省略了【对象名称】,两者不同!!!
四种权限修饰符
public > protected > (default) > private
同一个类(我自己) YES YES YES YES
同一个包(我邻居) YES YES YES NO
不同包子类(我儿子) YES YES NO NO
不同包非子类(陌生人) YES NO NO NO
注:Default代表默认值,不写
final修饰 (代表最终的,不可变的)
1.类 不可有子类
2.方法 子类不可重写
3.局部变量 不可变 (引用类型变量是地址不可变)
4.成员变量 必须手动赋值 (直接赋值和构造方法赋值二者选其一)