成员内部类的定义格式
修饰符 class 外部类名称 {
修饰符 class 内部类名称{
...
}
...
}
【注意】内 用外,随意访问;外用内,需要内部类对象内用
如何使用成员内部类?有两种方式
1 间接方式:在外部类的方法当中,使用内部类,然后main只是调用外部类方法
2 直接方式:公式
外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称;
如果出现了重名现象,那么格式是:外部类名称.this.外部类成员变量名
如果一个类定义在一个方法的内部,那么这就是一个局部内部类
“局部”:只有当前所属的方法才能使用它,出了这个方法,外面就不能用了
定义格式
修饰符 class 外部类名称 {
修饰符 返回值类型 外部类方法名称(参数列表){
class 局部类名称{
...
}
}
}
小结一下类的权限修饰符
public>protected>空写>private
定义一个类的时候,权限修饰符规则
1 外部类:public/空写
2 成员内部类:public/protected/空写/private
3 局部内部类:什么都不写
局部内部类,如果希望访问所在的方法的局部变量,那么这个局部变量必须是【有效final】的
备注:从java8开始,只要局部变量事实不变,那么final关键字就可以省略
原因:
1 new出来的对象在堆内存当中
2 局部变量是跟着方法走的,在栈内存当中
3 方法运行结束之后,立刻出栈,局部变量会立刻消失
4 new出来的对象会在堆当中持续存在,直到垃圾回收消失
如果接口的实现类(或者父类的子类)只需要使用唯一一次
那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】
匿名内部类的定义格式
接口名称 对象名 = new 接口名称(){
覆盖重写所有抽象方法
}
对格式进行解析
1 new代表创建对象的动作
2 接口名称就是匿名内部类需要实现哪个接口
3 {...}才是匿名内部类的内容
【注意】
1 匿名内部类在【创建对象】的时候,只能使用唯一一次
如果希望多次创建对象,而且类的内容一样的话,那么就必须使用单独调用的实现类了
2 匿名对象,在【调用方法】的时候,只能调用唯一一次
需要再创建一个匿名内部类的匿名对象
3 匿名内部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】
强调!!匿名内部类和匿名对象不是一回事!
一,Object类
1 Object类介绍
Object类是所有类的父亲,一个类都会直接或间接的继承自该类
该类中提供了一些非常常用的方法
2 toString()方法
A:作用: 打印对象信息
B:重写前:打印的是包
C:重写后:打印的是对象中的属性值
3 equals()方法
A:作用: 比较对象
B:重写前:比较的是对象的地址值
C:重写后:比较的是对象的属性值