7.1内部类
在java中只能实现单继承,但是对于一些特殊情况需要继承多个类时就无法解决,通过接口只能实现功能的扩展,没有办法体现类之间的关系。此时就产生了内部类的语法结构。改语法结构实际上是对单继承的补充。
7.1.1内部类的分类
1.成员内部类
成员内部类与成员变量或者是方法属于同级,在声明时直接在类的内部声明一个class即可。
public class OuterClass {
private int num = 10 ;
private static int AGE = 30 ;
public class InnerClass {
private int a = 10 ;
private int num = 10 ;
public void show() {
num = 20 ;
sout("我是内部类的show方法") ;
}
}
}
public static void main(String[] args) {
//步骤1:实例外部类
OuterClass outerClass = new OuterClass() ;
outerClass.num = 20 ;
//步骤2:实例化内部类
//外部类.内部类 对象名 = 外部类对象名.new 内部类名() ;
OuterClass.InnerClass innerClass = outerClass.new InnerClass() ;
innerClass.show();
}
成员内部类能够直接访问外部类的属性和方法,当内部类需要访问外部的属性时,可以“外部类的类名.this.属性”来进行获取。
2.局部内部类
定义在方法内部,主要是为了能够为当前方法进行增强。在局部变量位置定义。
public class OuterClass {
private int num = 10 ;
private static int AGE = 30 ;
public void show() {
public class InnerClass {
private int a = 10 ;
private int num = 10 ;
public void show() {
sout("我是内部方法") ;
}
}
InnerClass innerClass = new InnerClass() ;
innerClass.show() ;
}
}
3.静态内部类
在类的内部又定义了一个static修饰的静态类。
public class OuterClass {
private int num = 10 ;
private static int AGE = 30 ;
public static class InnerClass {
//属性
//方法
}
}
public static void main(String[] args) {
OuterClass.InnerClass.属性/方法 ;
//在静态类中包含实例方法或者是属性
InnerClass innerClass = new InnerClass() ;
innerClass.属性/方法 ;
}
4.匿名内部类
面向对象或者是接口。
// 抽象类/接口 对象名 = new 抽象类/接口 {
//实现抽象类/接口的抽象方法
@Override
public void show() { //由抽象类或接口声明的。
//方法实现。
}
} ;
对象名.show() ;