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();
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值