当前位置 : 首页> Java教程 > Java编程语言之成员式内部类

Java编程语言之成员式内部类

时间:2016-08-04 18:13   已访问:303次

今天IT培训网小编要介绍的就是“Java静态内部类、匿名内部类、成员式内部类和局部内部类”其中一个类方面的信息-成员式内部类希望大家可以用心学习,认真对待学习中的每个细节。

内部类:

使用内部类减少了命名冲突。

一个内部类可以定义在一个类中,一个方法中甚至一个表达式中。

内部类分为四种:

静态内部类(static inner classes)

成员内部类(member inner classes)

局部内部类(local inner classes)

匿名内部类(anonymous inner classes)

内部类可以是静态(static)的,可以使用 public、protected 和 private 访问控制符,而外部类只能使用 public,或者默认。

成员式内部类

在外部类内部直接定义(不在方法内部或代码块内部)的类就是成员式内部类,它可以直接使用外部类的所有变量和方法,即使是 private 的。外部类要想访问内部类的成员变量和方法,则需要通过内部类的对象来获取。

请看下面的代码:

public class Outer{

    private int size;

    public class Inner {

        public void dostuff() {

            size++;

        }

    }

    public void testTheInner() {

        Inner in = new Inner();

        in.dostuff();

    }

}

成员式内部类如同外部类的一个普通成员。

成员式内部类可以使用各种修饰符,包括 public、protected、private、static、final 和 abstract,也可以不写。

若有 static 修饰符,就为类级,否则为对象级。类级可以通过外部类直接访问,对象级需要先生成外部的对象后才能访问。

非静态内部类中不能声明任何 static 成员。

内部类可以相互调用,例如:

class A {

    // B、C 间可以互相调用

    class B {}

    class C {}

}

成员式内部类的访问

内部类的对象以成员变量的方式记录其所依赖的外层类对象的引用,因而可以找到该外层类对象并访问其成员。该成员变量是系统自动为非 static 的内部类添加的,名称约定为“outClassName.this”。

1) 使用内部类中定义的非静态变量和方法时,要先创建外部类的对象,再由“outObjectName.new”操作符创建内部类的对象,再调用内部类的方法,如下所示:

public class Demo{

    public static void main(String[] args) {

        Outer outer = new Outer();

        Outer.Inner inner = outer.new Inner();

        inner.dostuff();

    }

}

class Outer{

    private int size;

    class Inner{

        public void dostuff() {

            size++;

        }

    }

}

2) static 内部类相当于其外部类的 static 成员,它的对象与外部类对象间不存在依赖关系,因此可直接创建。示例如下:

public class Demo{

    public static void main(String[] args) {

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

        inner.dostuff();

    }

}

class Outer{

    private static int size;

    static class Inner {

        public void dostuff() {

            size++;

            System.out.println("size=" + size);

        }

    }

}

运行结果:

size=1

3) 由于内部类可以直接访问其外部类的成分,因此当内部类与其外部类中存在同名属性或方法时,也将导致命名冲突。所以在多层调用时要指明,如下所示:

public class Outer{

    private int size;

    public class Inner{

        private int size;

        public void dostuff(int size){

            size++;  // 局部变量 size;

            this.size;  // 内部类的 size

            Outer.this.size++;  // 外部类的 size

        }

    }

}

关于“Java编程语言之成员式内部类”方面的介绍就到这里了,希望大家认真学习,Java作为高薪的职业,学好则前途无忧,否则只能碌碌无为。


推荐内容