Java内部类知识整理

一、内部类

将类定义在其他类的内部(成员位置或局部位置),此种方式定义的类称之为内部类。定义在成员位置的类称之为成员内部类。定义在局部位置的类称之为局部内部类。

成员内部类可以使用成员修饰符,如public、private、static等等。它也是个类,可以继承、实现接口等。

内部类可以使用外部的成员,包括私有的。但是外部类要使用内部类的成员,必须要创建内部类对象。

创建内部类对象格式:

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

例:

//外部类
public class Outer {

    //成员内部类
     class Inner{
        public Inner(){
            System.out.println("我是成员内类的构造方法!");
        }
        //成员内部类方法
        public void innerFun(){
            System.out.println("我是成员内部类的方法!");
        }
    }

}
//定义测试类
class Test{
    public static void main(String[] args){
        //创建成员内部类对象
        Outer.Inner oi = new Outer().new Inner();
        //调用内部类方法
        oi.innerFun();
    }
}

局部内部类,要想使用其中的成员,要在成员方法中创建局部内部类对象,然后调用其成员。

例:

//外部类
public class Outer {

    //成员方法
    public void fun(){
        //局部内部类
        class Inner{
            public Inner(){
                System.out.println("我是局部内部类的构造方法!");
            }
            //局部内部类的方法
            public void sectionInnerFun(){
                System.out.println("我是局部内部类的成员方法!");
            }
        }
        //创建局部内部类对象
        Inner in = new Inner();
        //调用其成员方法
        in.sectionInnerFun();
    }

}
//定义测试类
class Test{
    public static void main(String[] args){
        //创建外部类对象,调用成员方法即可
        new Outer().fun();

    }
}

二、匿名内部类

匿名内部类是局部内部类的一种,是创建某个类型的子类对象的便捷方式,其不能有构造方法。

格式:

new 接口或父类(){
    重写抽象方法
};

例:

//定义“人”类接口
public interface Person {
    //定义抽象方法eat
    public void eat();
    //定义抽象方法 sleep
    public void sleep();
}




public class MyTest {

    public static void main(String[] args){
        //使用匿名内部类方式创建实现类对象,以下是多态体现,父类引用指向子类对象(new 关键开始到分号结束 为子类对象)
        Person p = new Person(){
            //实现接口中的所有抽象方法
            @Override
            public void eat() {
                System.out.println("吃饭!");
            }
            @Override
            public void sleep() {
                System.out.println("睡觉!");
            }
        };
        //调用重写后的方法
        p.eat();
        p.sleep();
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章