面向对象07

面向对象07

1、成员内部类
  • 类中套类,外面的称为外部类,里面的则是内部类

  • 内部类通常只服务于外部类,对外不可见(在其他类new不出来,必须通过外部类来访问内部类)

    public class Demo01 {
    class TestDemo02 {
    }
    }
    class TestDemo01  {
        public static void main(String[] args) {
            Demo01 demo01 = new Demo01();
            //TestDemo02 testDemo02 = new TestDemo02(); 编译错误,内部类对外不可见
        }
    }
    
  • 内部类对象通常在外部类中创建

    public class Demo01 {
         public static void main(String[] args) {
             TestDemo02 testDemo02 = new TestDemo02();//在外部类中创建内部类对象   
         }
      static class TestDemo02 {
    }//在静态方法中只能访问静态成员
    }
    
    
  • 内部类中可以直接访问外部类成员(包括私有),

    内部类有个隐式的引用指向了创建它的属于外部类的对象(外部类名.this)

    public class Demo01 {
         private int a = 1;
        
    
       class TestDemo02 {
           void show(){
               System.out.println(a);//可以直接访问外部类成员,包括私有
                System.out.println(Demo01.this.a);//和上面同一个意思,隐式的引用外部类对象
           }
    }
    }
    
2、匿名内部类(简化代码)
  • 若想创建一个类(派生类)的对象,并且对象只被创建一次,此时可以设计为匿名内部类

    public class Demo01 {
         int a = 1;
         public static void main(String[] args) {
             int b = 1;
             // TestDemo01类是抽象的,本来不能实例化
             //匿名内部类相当于创建了一个没有名字的的类继承这个抽象类
             //new的对象即testDemo01指向的地址实际上是这个匿名类的对象
             //大括号内是这个匿名类的类体
             TestDemo01 testDemo01 = new TestDemo01(){
             };
             //若抽象类中有抽象方法,则匿名内部类也必须重写这个方法
    
             TestDemo02 testDemo02 = new TestDemo02(){
                 void show(){
                     
                     // b = 2; 外部类的局部变量相当于final,不可改变
                 }
             };
             testDemo02.show();//调用内部类中的方法
         }
    }
    abstract class TestDemo01  {
    
    }
    abstract class TestDemo02 {
        abstract void show();
    }
    
  • 匿名内部类中不能修饰外面局部变量的值,因为该变量在此处默认为final的------------API时会用

  • 问:内部类有独立的.class吗?

    答:有

补充:

隐式的引用:

this:指代当前对象

super:指代当前对象的超类对象

外部类名.this:指代当前对象的外部类对象

\2. 做功能的套路:

先写行为/方法:

若为某个派生类所特有的功能/行为,则将方法设计在特定的类中

若为所有派生类所共有的功能/行为,则将方法设计在超类中

窗口调用:

若为定时发生的,则在定时器中调用

若为事件触发的,则在侦听器中调用-----------------明天讲

\3. 如何调错:

先快速锁定问题方法:

将调用方法的代码都注释掉,然后一个一个的放开,放开哪个方法出错,说明问题就出在哪个方法上

打桩:

System.out.println(数据);

\4. 文档注释:

是功能性注释,描述整个类是干什么的,方法是干什么的,常量是干什么的。

一般写在类上、方法上、常量上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值