内部类

来源:互联网 发布:淘宝网店网址不能修改 编辑:程序博客网 时间:2024/04/29 15:30

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

共性:
(1)、内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 。
eg:
class A {
class B{}
}
编译A.class和A$B.class。
成员内部类
 1. 成员内部类可以直接访问外部类的所有成员,由于内部类是在外部类之中的,所以外部类各个访问级别的成员都是可以访问到的。
2.成员内部类中还能拥有自己的成员内部类,最里面的内部类能访问到所有外部类的成员。
3.外部类不能直接访问内部类的成员,必须创建内部类的对象,才能访问到。
4.成员内部类中不能定义静态变量和静态方法。
5.在内部类中如有与外部类由相同名字的变量需要使用外部类名.this.变量名的方式访问。
方法内部类
(1)、方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。
(2)、方法内部类对象不能使用该内部类所在方法的非final局部变量。
class Outer {
public void doSomething(){
final int a =10;
class Inner{
public void seeOuter(){
System.out.println(a);
}
}
Inner in = new Inner();
in.seeOuter();
}
public static void main(String[] args) {
Outer out = new Outer();
out.doSomething();
}
}
匿名内部类

只用到类的一个实例 。
·类在定义后马上用到。
  静态嵌套内部类

除了使用访问控制符限定成员内部类以外,我们还能使用static修饰我们的内部类。
class OutterClass{
static class InnerClass{

}
}
要创建静态内部类的对象:
OutterClass.InnerClass inner = new OutterClass.InnerClass() ;

1.静态内部类可以直接访问外部类的静态成员。
2.静态内部类中可以有静态成员也可以有实例成员。
3.静态内部类中的静态成员可以直接使用外部类名.内部类名.静态成员的方式调用。
    

每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。

0 0
原创粉丝点击