内部类

内部类概念:把类写在其他类的内部,可以写在其他类的成员位置和局部位置,这个时候写在其他类内部的类就成为内部类

什么时候用:当描述一个事物的时候,如果这个事物内部还包含其他的类,那就可以用内部类来描述事物包好的食物

分类:内部成员类,局部内部类

成员内部类:写在类的成员变量或成员方法处

定义格式:

    class 外部类 { 
    修饰符 class 内部类 {
        //其他代码
}
}

访问方式:

外部类名.内部类名 变量名 = new 外部类名().new 内部类名();

代码演示,定义一个内部类

package com.oracle.demo03;

public class Outer {
    int num=1;
    //成员内部类
    class Inner{
        int num=2;
        public void in(){
            int num=3;
            //System.out.println(num); num=3
            //System.out.println(this.num);=2
            System.out.println(Outer.this.num);
        }
    }
}

访问调用

package com.oracle.demo03;

public class test {
    public static void main(String[] args) {
        Outer.Inner oi=new Outer().new Inner();
        oi.in();
    }
}

局部内部类:定义在外部方法中的局部位置,访问方式和局部变量相似

定义格式:

class 外部类 { 
    修饰符 返回值类型 方法名(参数) {
class 内部类 {
//其他代码
}
}
}

访问方式:在外部类方法中,创建内部类对象,进行访问

 

代码  定义一个局部内部类

package com.oracle.demo04;
//外部类
public class Outer {
    public void out(){
        //局部内部类
        class Inner{
            public void in(){
                System.out.println("这是局部内部类方法");
            }
        }
        //调用方法
        Inner in=new Inner();
        in.in();
    }
}

访问调用

package com.oracle.demo04;

public class test {
    public static void main(String[] args) {
        Outer outer=new Outer();
        outer.out();
    }
}

内部类在实际中的使用:匿名内部类

概念:1.临时定义某一个指定类型的子类

    2.顶一哈即可创建刚刚定义的这个子类的对象

作用:匿名内部类是创建某个类型子类对象的快捷方式

格式

new 父类或接口(){
    //进行方法重写
};

例子:

package com.oracle.demo05;

public interface Smoking {
    public abstract void smoke();
    public abstract void eat();
}
package com.oracle.demo05;

public class test {
    public static void main(String[] args) {
        //匿名内部类对象
        //new 父类或接口(){ 进行方法重写 }
        new Smoking(){
            public void smoke(){
                System.out.println("抽烟");
            }
            public void eat(){
                System.out.println("吃饭");
            }
        }.smoke();;
    }
}
posted @ 2018-09-26 21:02  井盖同学  阅读(115)  评论(0编辑  收藏  举报