成员以及匿名内部类

1.成员内部类:


    1.1.类中套类,外面的称为外部类,里面的称为内部类
    1.2.内部类通常只服务于外部类,对外不具备可见性
    1.3.内部类对象通常在外部类中创建
    1.4.内部类中可以直接访问外部类的成员(包括私有的)
        内部类中有一个隐式的引用,指向了创建它的外部类对象
        外部类名.this:指代当前对象的外部类对象

public class Test {
    public static void main(String[] args) {
        Aoo o1= new Aoo(); //
        
        // Boo o2= new Boo(); //编译错误,内部类对外不具备可见性
    }
}

class Aoo{ //外部类
    int a;
    Boo o= new Boo();
    class Boo{ //成员内部类
        void show(){
            System.out.println(a); //这是简写
            System.out.println(Aoo.this.a); //这是完整写法
        }
    }
}


2.匿名内部类:


    2.1.若想创建一个类的对象,并且对象只被创建一次,此时可以设计为匿名内部类
    2.2.在匿名内部类中是不能修改外面局部变量的值,因为在此处该变量的值会默认为final
    2.3.内部类有独立的.class

3.做功能的套路:


    3.1.先写行为方法
        3.1.1.若为子类所特有的行为,则将方法设计在特定的类中
        3.1.2.若为所有子类所共有的行为则将方法设计在超类中 
    3.2.窗口调用
        3.3.调用方法的注意事项:
        3.3.1.若方法是有返回值的,则必须声明对应类型的变量来接收
        3.3.2.调用时
        -若与方法在同一类中可以直接调用
        -若不在同一个类中,则需要通过引用名打点调用
        -若方法为静态的,则直接通过类名打点来调用

4.隐式的引用:


    4.1.this:指代当前对象
    4.2.super:指代当前对象的超类对象
    4.3.外部类名.this:指代当前对象的外部类对象

5.错误分类:


    5.1.编译错误--------违反语法规则
    5.2.异常--------运行时发生,找到@后的链接点击
    5.3.程序的运行结果与预期不符

public class NstInnerClassDemo {
  public static void main(String[] args) {

       //对于匿名内部类而言
       //Ao---------------父类
       //NstInnerClassDemo---------外部类
       Ao o1 = new Ao(){};
       //1.创建了一个Ao的派生类,但是没有名字
       //2.为该派生类创建了一个对象,名为o1------new Ao(){}的派类的对象
      //3.{}中的为子类的类体,如果有抽象方法则必须重写
       Ao o2 = new Ao(){};
      //1.创建了一个Ao的派生类,但是没有名字
      //2.为该派生类创建了一个对象,名为o1------new Ao(){}的派类的对象
      //3.{}中的为子类的类体,如果有抽象方法则必须重写

       //Boo o3 = new Boo(){
        //}; //编译错误
      int num =5;
      num =55;
      Boo o4 =new Boo() {
          void show() {
              System.out.println("show");
              //num =53; //编译错误,匿名内部类中不能修改外面局部变量的值 
              //因为在此处该变量的值会默认为final
          }
      };
      o4.show();
      
   //1.创建了一个Boo的派生类,但是没有名字
   //2.为该派生类创建了一个对象,名为o3------new Boo(){}的派类的对象
   //3.{}中的为子类的类体,如果有抽象方法则必须重写
      
  }
}
abstract class Boo{
    abstract void show();
}

class Bo extends Ao{

}

abstract class Ao{

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值