内部类
一、概念
内部类的最大作用是实现多重继承。
- 在java中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类
- Inner class一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称
- Inner class的名字不能与包含它的类名相同
- Inner class可以使用外部类的私有数据,因为它是外部类的成员,同一个类的成员之间可互相访问。而外部类要访问内部类中的成员需要:内部类.成员或者内部类对象.成员
- 分类
- 成员内部类(static成员内部类和非static成员内部类)
- 局部内部类(不谈修饰符)、匿名内部类
二、示例
public class Test3{
int i;
public int z;
private int k;
class A{
int i;
public void setTest3Fileds(){
Test3.this.i = 1;//Test3类的变量
Test3.this.z = 2;
Test3.this.k = 3;
}
public void set(){
this.i = 10;//内部类自己的变量
}
}
public void setInfo(){
new A().setTest3Fileds();//外部的类要用自己的内部类的方法,得先new内部类的对象
}
public void showInfo(){
System.out.println(this.i);
System.out.println(this.z);
System.out.println(this.k);
}
public static void main(String[] args){
Test3 t = new Test3();
t.setInfo();
t.showInfo();
}
}
输出:
1
2
3
三、内部类的特性
Inner class作为类的成员:
- 可以声明为final的
- 和外部类不同,Inner class可声明为private或protected
- Inner class可以声明为static的,但此时就不能再使用外层类的非static的成员变量
- 可以声明为abstract类因此可以被其他的内部类继承
- 注意:
- 非static的内部类中的成员不能声明为static的,只有在外部类或在static的内部类中才可声明static成员。
四、内部类的作用
内部类主要是解决java不能多重继承的问题
//Test4.java
//现在类A想同时获得类B和类C的方法,并且重写
public class Test4{
}
class A{
}
class B{
public void testB(){
}
}
class C{
public void testC(){
}
}
//Test4.java
//现在类A想同时获得类B和类C的方法,并且重写
//可以使用内部类来变相的实现类的多重继承,可以同时继承多个类
public class Test4{
public static void main(String[] args){
A a = new A();
a.testB();
a.testC();
}
}
class A{
public void testB(){
new InnerB().testB();
}
public void testC(){
new InnerC().testC();
}
private class InnerB extends B{
@Override
public void testB(){
System.out.println("这是重写之后的testB方法");
}
}
private class InnerC extends C{
@Override
public void testC(){
System.out.println("这是重写之后的testC方法");
}
}
}
class B{
public void testB(){
}
}
class C{
public void testC(){
}
}