内部类

来源:互联网 发布:java excel 小数 4位 编辑:程序博客网 时间:2024/06/01 12:46
  • 内部类:

    把类A定义在类B的内部,类A就被称为内部类。
  • 访问特点:

(代码验证只要编译通过说明就是没有问题的)
A:内部类可以直接访问外部类的成员,包括私有。
B:外部类要访问内部类的成员,必须创建对象。

**内部类分类:**    成员位置:成员内部类    局部位置:局部内部类

成员内部类:
外界如何创建对象

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

局部内部类:
A:可以直接访问外部类的成员,包括私有
B:在成员方法中创建局部内部类的对象,调用局部内部类的功能

  • 练习:
需求:请补齐代码,在控制台输出30,20,10    */    class Outer {        public int num = 10;        private class Inner {            public int num = 20;            public void show() {                int num = 30;                System.out.println(?);                System.out.println(?);                System.out.println(?);            }        }        public void method() {            Inner i = new Inner();            i.show();        }    }    class InnerClassTest {        public static void main(String[] args) {            Outer o = new Outer();            o.method();        }    }

解答:
System.out.println(?);//num
System.out.println(?);//this.num
System.out.println(?);//new Outer().num或者Outer.this.num

第一个在方法内被定义,直接调用即可;
第二个在内部类中定义,可使用this.来调用。
第三个在外嵌类中定义,而num不是被static修饰的,所以不能用类名.num来调用,应该用new Outer().num。

  • 匿名内部类

    没有名字的局部内部类,就是内部类的简化写法

    前提:
    存在一个类或者接口
    这里的类可以是具体类也可以是抽象类。

    格式:
    new 类名或者接口名() {
    重写方法;
    };

    本质:
    是一个继承了类或者实现了接口的子类匿名对象。

练习:

按照要求,补齐代码    要求在控制台输出”HelloWorld”    */    interface Inter {         void show();     }    class Outer {         //补齐代码    }    class InnerClassTest {        public static void main(String[] args) {              Outer.method().show();        }    }

解答:

class Outer {         //补齐代码            public static Inter method(){                return new Inter(){                    public void show() {                        System.out.println("HelloWorld");                    }                   };            }         }
0 0