Java——内部类

1.什么是内部类

将类写在其他类的内部,可以写在其他的成员位置和其他类的局部位置,这时写在其他类内部的类就称为内部类,简单来说,内部类就是编写在一个类的内部的类,而外部这个类叫外部类

2.什么时候使用内部类

在描述事物时,若一个事物内部还包含其他可能包含的事物,比如在描述汽车时,汽车中还包含发动机这个事物,这是发动机就可以使用内部类来描述,即内部事物必须寄宿在外部事物内部

简单来说,在我们实现功能的过程中,如何希望封装实现的细节,那么我们就可以使用内部类,最常见的就是坐 Android 开发时

3.内部类的使用

class Outer { //外部类
    public void fun() {
        System.out.println("Other fun()");
    }
    class Inner { /内部类
        public void show() {
            System.out.println("Inner show()");
         }
     }
}
public class InnerClassDemo {
    public static void main(String[] args) {
    //实例化外部类
    Outer outer = new Outer();
    outer.fun();
    //通过外部对象来实例化内部类
    Outer.Inner inner = outer.new Inner();
    inner.show();
    //如果希望直接实例化内部对象,那么可以通过下面的方式来创建
    Outer.Inner inner1 = new Outer().new Inner();
    inner1.show();
    }
}

非静态内部类的实例化方式为:外部类名 . 内部类名  引用名称 = 外部对象 . 内部对象

除了可以通过外部对象 . 内部对象的方式来使用内部类,还可以在外部类中定义方法,在这个方法中去实例化内部类,如:

class Outer1 {
    public void print() {
        Inner1 inner1 = new Inner1();
        inner1.show();
    }
    private class Inner1 {
        public void show() {
            System.out.println("Inner1 show()");
       }
    }
}
public class InnerClassDemo2 {
    public static void main(String[] args) {
        /*Outer1.Inner1 inner1 = new Outer1().new Inner1();
        inner1.show(); */

        Outer1 outer1 = new Outer1();
        outer1.print();
    }
}

这种方式一般用于私有的内部类

4.静态内部类

上述方法是非静态成员的内部类,也叫实力内部类

下面我们编写静态内部类

class Outer2 {
    //静态成员内问类
    static class Inner2 {
        public void say() {
            System.out.println("Inner2 say()");
        }
    }
}
public class StaticInnerClass {
    public static void main(String[] args) {
        //静态成员内部类的实例化方式为:new 外部类名.内部类名()
        Outer2.Inner2 inner2 = new Outer2.Inner2();
        inner2.say();
    }
}

静态内部类的实例化方式:外部类名 . 内部类名  引用名称 = new 外部类名 .  内部类名()

5.局部内部类

将内部定义在外部类中的某个方法中,那么这种内部类就是局部内部类

class Outer3 {
    public void create() {
        //局部内部类
        class Inner3 {
        public void show() {
            System.out.println("Inner3 show()");
        }
    }
        Inner3 inner3 = new Inner3();
        inner3.show();
    }
}
public class LocalInnerClass {
    public static void main(String[] args) {
        Outer3 outer3 = new Outer3();
        outer3.create();
    }
}

局部内部类的创建只能在局部内部类所在方法中来实例化

6.内部类面试题

说出下面程序的输出结果

class Outer5 {
    private int num = 5;
        class Inner5 {
        private int num = 10;
        public void fun() {
            int num = 15;
            System.out.println(num); // 15
            System.out.println(this.num); // 10
            System.out.println(Outer5.this.num); // 5
        }
    }
}
public class InterviewQuestions {
    public static void main(String[] args) {
        Outer5.Inner5 inner5 = new Outer5().new Inner5();
        inner5.fun();
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值