面向对象---内部类浅谈

成员内部类:

/*

* A:内部类概述

         类中的类

* B:内部类访问特点

         * a:内部类可以直接访问外部类的成员,包括私有。

         * b:外部类要访问内部类的成员,必须创建对象。

         * 外部类名.内部类名 对象名 = 外部类对象.内部类对象;

*/

(1)如何调用内部类方法

class Demo1_InnerClass {
    public static void main(String[] args) {
        //外部类名.内部类名 对象名 = 外部类对象.内部类对象;
        Outer.Inner oi = new Outer().new Inner();
        oi.method();
    }
}

class Outer {
    public int num = 10;
    private int a = 20;
//注意内部类的位置和外部类成员变量的位置并列,可联想怎么调用外部类成员变量来调用内部类

    class Inner {
        public void method() {
            System.out.println(num);
            System.out.println(a);
        }
    }
}

(2)若内部类私有,(其实和外部类成员变量私有一回事儿,只需在本类中提供公共方法即可。)

eg.

class Demo2_InnerClass {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.print();    
    }
}

class Outer {
    private int num = 10;
    private class Inner {
        public void method() {
            System.out.println(num);
        }
    }

    public void print() {
        Inner i = new Inner();
        i.method();
    }
}

静态内部类:

(1)如何调用静态内部类方法呢?

外部类名.内部类名 对象名 = 外部类名.内部类对象;

  Outer.Inner oi = new Outer.Inner();

如果内部类方法为静态,可直接通过类名调用

eg.

class Demo1_InnerClass {
    public static void main(String[] args) {
        //外部类名.内部类名 对象名 = 外部类名.内部类对象;
        Outer.Inner oi = new Outer.Inner();
        oi.method();
        //调用静态内部类中的静态方法,通过类名调用。
        Outer.Inner2.method();
    }
}


class Outer {
    static int num = 10;
    static class Inner {
        public void method() {
            System.out.println("Hello World");
        }
    }
    
    static class Inner2 {
        public static void method() {
            System.out.println("static Hello World");
        }
    }
}

(2)如何调用成员变量

eg. 要求:使用已知的变量,在控制台输出30,20,10。

class Test1_InnerClass {
    public static void main(String[] args) {
        Outer.Inner oi = new Outer().new Inner();
        oi.show();
    }
}

class Outer {
    public int num = 10;
    class Inner {
        public int num = 20;
        public void show() {
            int num = 30;
            System.out.println(num);
            //System.out.println(Inner.this.num);
            //所属类Inner可以省略
            System.out.println(this.num);
            System.out.println(Outer.this.num);
        }
    }
}

复习一下,this关键字调用本类的成员变量。

局部内部类

如何调用局部内部类方法?

eg

class Demo1_InnerClass {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.method();
    }
}
//局部内部类
class Outer {
    public void method() {
        class Inner {
            public void print() {
                System.out.println("Hello World");
            }
        }

        Inner i = new Inner();   
        i.print();
    }
}

在外部类的方法(method())里面创建内部类对象后,直接在主方法里创建外部类对象调用method()即可。

未完待续.........

猜你喜欢

转载自www.cnblogs.com/songzongyuan-java/p/9325787.html