面向对象 内部类

内部类的共性内部类分为:成员内部类、静态嵌套类、匿名内部类(直接new抽象类,直接new接口类)。

如果是函数式接口,可以使用lambda表达,这样可以避免new接口产生内部匿名类

(1)、内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但还是前面冠以外部类的类名和$符号。

(2)、内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的。

(3)、外部类不能直接访问其内部类,想要访问内部类,需要实例化内部类 示例如下

public class Outter {
    //Inner为成员内部类
class Inner {

    }
 public void show() {
        Inner in = new Inner();
    }
}

(4)、内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量。

(5)、其他类想要直接访问内部类,可直接实例化内部类,方法如下:

外部类名.内部类 对象名 = new 外部类().new 内部类名();

例如:Outter.Inner ins = new Outter().new Inner();

如果内部类是静态的,当其他类调用内部类可直接通过类名调用,格式如下:

外部类名.内部类名 对象名 = new 外部类名.内部类名();

例如:Outter.Inner ins2 = new Outter.Inner();

当内部类是静态的,切方法也是静态的,此时可不需要实例化对象

外部类名.内部类名.静态方法名();

Outter.Inner.fun();

public class Outter {
    //Inner为非静态成员内部类
class Inner {
public static void fun(){

        }
    }
//静态内部类
static class Inner2 {

    }

    public static void main(String[] args) {
        //静态方法里无法直接new非静态内部类 需要通过以下方法new   
        Outter.Inner ins = new Outter().new Inner();
        //静态内部类可以直接在静态方法里面new
        Inner2 ins3 = new Inner2();
        Outter.Inner2 ins4 = new Outter.Inner2();
        
        //嵌套内部类
        class A {

        }
        A a = new A();

        interface B {

        }

        //实例化接口和实例化抽象类会产生匿名内部类
        B b = new B() {

        };
        //直接调用内部类的静态方法
        Outter.Inner.fun();
    }
//非静态方法可以直接new内部类
    public void show() {
        Inner in = new Inner();
    }

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值