java之内部类

在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类。

Inner class一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称,Inner的名字不能与包含它的类名相同;

Inner class可以使用外部类的私有数据,因为它是外部类成员,同一个类的成员之间可以相互访问,而外部类要访问内部类中的成员需要:内部类.成员或者内部类对象.成员。

分类:成员内部类(static成员内部类和非static成员内部类)、局部内部类(不带修饰符)、匿名内部类

Test.java

package fac;

public class Test {
    int i;
    public int j;
    private int k;
    class A{
        int i;
        public void setTestFields() {
            Test.this.i = 1;
            Test.this.j = 2;
            Test.this.k = 3;
        }
        public void set() {
            this.i = 4;
        }
        public void get() {
            System.out.println(this.i);
        }
    }
    public void seInfo() {
        new A().setTestFields();
    }
    public void showInfo() {
        System.out.println(this.i);
        System.out.println(this.j);
        System.out.println(this.k);
    }
    public static void main(String[] args) {
        Test t = new Test();
        t.seInfo();
        t.showInfo();
        Test.A a = t.new A();
        a.set();
        a.get();
    }
}

输出:

1

2

3

4

内部类特性:

  • 可以声明为final;
  • 和外部类不同,Inner class可声明为private和protected;
  • inner class可以声明为static,但此时就不能再使用外层类的非static的成员变量;
  • 可以声明为abstract类,因此可以被其它内部类所继承;

内部类的作用是什么?

主要是解决Java不能多重继承。

package fac;

public class Test2 {
    
    public static void main(String[] args) {
        //现在类A可以获得类B和类C的方法
        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{
        public void testB(){
            System.out.println("这是重写之后的B方法");
        }
    }
    private class InnerC extends C{
        public void testC(){
            System.out.println("这是重写之后的C方法");
        }
    }
    
}
class B{
    public void testB(){
    
}}
class C{
    public void testC(){
    
}}

输出:

这是重写之后的B方法
这是重写之后的C方法

你可能感兴趣的:(java之内部类)