Java 内部类简介

Java1.1开始引入内部类。

一、为什么引入内部类

相比于C++java中的内部类和接口,通常可以提供“多重继承”的解决方案。

二、什么是内部类

一个类定义在另一个类内部。

三、内部类的分类

内部类分成员内部类、静态嵌套类、方法内部类、匿名内部类。

四、内部类的特征

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

(2)、内部类不能以通常访问类的方式访问。内部类是外部类的一个成员,因此,内部类可以自由的访问外部类所有的成员变量。

(3)、内部类被声明成静态的后,就不能随便访问外部类的成员变量,只能访问外部类的静态成员变量。

五、成员内部类

作为外部类的一个成员。

Class Outer{
    Class Inner{}
}

访问方式:

(1)、从外部类的非静态方法中实例化内部类对象。

(2)、从外部类的静态方法中实例化内部类对象,必须先创建外部类对象。

(3)、内部类可以使用this引用当前对象。

(4)、内部类可用的修饰符有:finalabstractpublicprivateprotestedstrictfpstatic。一旦用static修饰内部类,它就变成静态内部类了。

六、方法内部类

类放在方法内。

Class Outer{
       Public void dosomething(){
              Class Inner{
              }
       }
}

访问方式:

(1)、方法内部类智能在定义该内部类的方法内实例化。

(2)、方法内部类对象不能使用该内部类所在方法的非final局部变量。

(3)、方法内部类没有访问修饰符。

(4)、 静态方法里的静态内部类只能访问外部类的静态成员。

七、匿名内部类

没有名字的内部类。

匿名内部类适用的时机:

(1)、只用到类的一个实例。

(2)、 类在定义后马上用到。

(3)、类非常小。

(4)、给类命名并不会导致代码更容易被理解。

匿名内部类使用的原则:

(1)、匿名内部类无构造函数。

(2)、 匿名内部类不能定义任何静态成员、方法和类。

(3)、匿名内部类修饰符不能是publicprotectedprivatestatic

(4)、 智能创建匿名内部类的一个实例。

(5)、一个匿名内部类一定是在new之后,用来隐含实现一个借口或实现一个类。

(6)、方法内部类的所有限制对匿名内部类都有效。

匿名内部类的样式:

(1)、 继承式匿名内部类:

class Car {
    public void drive() {}
}

class Test {
    public static void main(string[] args){
        Car car = new Car(){
            public void drive(){
                System.out.println("Driving another car !");
            }
        };
        car.drive();
    }
}

建立匿名内部类的关键点是重点重写父类的一个或多个方法。

(2)、接口式的匿名内部类。

Interface Vehicle{
    Public void drive();
}
class Test{
  public static void main(String[] args){
     Vehicle v = new Vehicle(){
          public void drive(){}
     };
     v.drive();
  }
}

接口式的匿名内部类实现了一个借口的匿名类。

(3)、 参数式的匿名内部类。

class Bar{
    void doStuff(Foo f){}
}
Interface Foo{
    void foo();
}
class Test{
    Static void go(){
        Bar b = new Bar();
        b.doStuff(new Foo(){
             public void foo(){
                 System.out.println();
             }
        );
    }
}

八、静态嵌套类

静态内部类只是在另一个类的内部。没有外部类对象时,也能够访问它。静态嵌套类不能访问外部类的非静态的成员和方法。

Class Outer{
    Static class Inner{}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值