内部类
* 成员内部类的的使用格式:定义在外部类的里边,所以必须通过外部类才能找到内部类
* 外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
* 内部类:定义在其他类内部的类
*
* 分类:
* 成员内部类:定义其他类的成员(类中方法外)位置的类
* 局部内部类:定义其他类的方法中的类
*
* 成员内部类的定义格式:
* 修饰符 class 外部类名{
* 修饰符 class 内部类名{
* 成员变量;
* 成员方法;
* }
* }
* 成员内部类的的使用格式:定义在外部类的里边,所以必须通过外部类才能找到内部类
* 外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
*
* 我们定义内部类时,就是一个正常定义类的过程,同样包含各种修饰符、继承与实现关系等。
* 在内部类中可以直接访问外部类的所有成员。
* 一个java文件中可以定义多个类,多个是并列关系
* 但是只能有一个类使用public修饰,被public修饰的类,必须和文件名相同
* 局部内部类:定义在外部类的方法中
*
* 注意:局部变量的修饰符只能是final
*
* 定义格式:
* 修饰符 class 外部类名{
* 修饰符 返回值类名 外部类方法名(参数){
* (final)class 局部内部类名{
* 成员变量;
* 成员方法;
* }
* //创建局部内部类的方法使用
* 局部内部类名 变量名 = new 局部内部类名();
* 变量名.成员变量
* 变量名.成员方法(参数);
* }
*
* }
*
* 使用格式:和局部变量一样,作用域只在方法中有效;只能在方法中使用,出了方法不能使用
* 必须在定义完成局部内部类之后,立即创建对象使用
* 匿名内部类:没有名字,定义在其他类方法中的类
* 作用:把定义子类,重写父类的方法,创建子类对象,合成一步完成
* 把定义实现类,重写接口的抽象方法,创建实现类对象,合成一步完成
* 结果:就是一个子类对象,子类对象没有名字
*
* 格式:
* new 父类/接口(){
* 重写父类/接口中的方法;
* };
*
* new Smoking(){
@Override
public void smoke() {
System.out.println("匿名内部类,重写接口的方法!");
}
};
以上一堆代码就是一个创建子类的过程,结果就是一个子类对象,相当于new Teacher()
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
出身决定命运,但努力一定不会错。