内部类:定义在另一个类中的类,它体现了一种代码的隐藏机制和访问控制机制。当往往只有外部类调用此类时,所以就没必要专门设置一个JAVA文件存放这个类。
分为 成员内部类,局部内部类,静态内部类,匿名内部类。
package com.example.aaaa;
import android.util.Log;
public class Outer {
public int num;
//成员内部类
private class Inner{
private Stringname;
}
public void fun(){
class Inner2{//局部内部类
private int num =2;
}
Inner2 inner2 =new Inner2();
System.out.println(inner2.num);
}
static class Inner3 {//静态内部类不持有外部类引用
public void getMethod () {
}
}
public static void main() {
Outer inner4 =new Outer() {//匿名内部类
public void func () {
System.out.println("2");
}
};
Outer outer =new Outer();
Inner inner = outer.new Inner();
Log.d("tanlin", inner.name);
}
}
2 Java 提供的两种方法让我们实现多重继承:接口和内部类
内部类可以继承一个与外部无关的类,从而保证内部类的独立性,正是这一点,多重继承才得以实现。
从实现代码和输出结果可以发现,儿子继承父类,变得比父亲更加强壮;同时也继承了母类,只不过友好指数下降。
为什么内部类会持有外部引用。而静态内部类不会呢
public class MyClass {
private static class MyInnerClass {
private String innerString;
public MyInnerClass( ) {
}
public MyInnerClass(String innerString ) {
this.innerString = innerString;
}
}
}
生成字节码文件.class文件
classMyClass$MyInnerClass
{
private String innerString;
public MyClass$MyInnerClass() {}
public MyClass$MyInnerClass(String paramString)
{
this.innerString = paramString;
}
}
而如果是静态内部类:
class MyClass$MyInnerClass
{
private String innerString;
public MyClass$MyInnerClass(MyClass paramMyClass) {}
public MyClass$MyInnerClass(MyClass paramMyClass, String paramString)
{
this.innerString = paramString;
}
}
结论:如上,默认为内部类加上了外部类的引用
网友评论