Java嵌套类,内部类和外部类

Posted wuzhiaite

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java嵌套类,内部类和外部类相关的知识,希望对你有一定的参考价值。

1.嵌套类,内部类

      嵌套类是指被定义在一个类内部的类; 

        JAVA的嵌套类有很多种类:1.静态成员类;2.非静态成员类;3.匿名类;4.局部类;其中,除了静态成员类之外,其他的都是内部类,因为静态成员类更像是一个独立的类;

      但是静态成员类,是外部类内部的一个成员,静态成员类的访问和其他的静态成员一样:1.通过外部类类名调用;2.如果静态成员类定义为私有,那么只能在外部类内部使用

       JAVA 内部类可以很好的实现隐藏,并且内部类拥有外围类的所有元素的访问权限,可是实现多重继承,并且可以避免修改接口而实现同一个类中两种同名方法的调用。

内部类有以下特点

1.内部类中如果有static的属性,或者方法,那么这个内部类必须是static class;

2.一个内部类static内部类,可以有非static的方法和属性;

2.外部类和内部类

  2.1.外部类访问内部类的属性或方法

可以通过new 对象,外部类可以调用内部类的所有域的属性和方法

public class Outer {
    private String name = "张三";
    public int age = 10;
    private void outerMethod(){
        Inner inner = new Inner();
        int age = inner.innerAge;
        String name = inner.innerName;
        inner.innerMethod();
        System.out.println("outer method");
    }

    class Inner{
        private String innerName = "Inner";
        public int innerAge = 14;
        public  void innerMethod(){
            System.out.println("inner start");
            System.out.println("inner end");
        }
    }

  2.2.内部类访问外部类的方法和属性

可以通过 外部类.this.内部类方法(属性)的方式调用所有域的属性和方法

public class Outer {
    private String name = "张三";
    public int age = 10;
    private void outerMethod(){
        System.out.println("outer method");
    }

    class Inner{
        public  void innerMethod(){
            System.out.println("inner start");
            Outer.this.outerMethod();
            String name = Outer.this.name;
            int age = Outer.this.age ;
            System.out.println("inner end");
        }
    }
}

  2.3 内部类调用内部类

和外部类调用内部类一样,用 new 对象的形式,可以访问另一个内部类的所有域属性和方法;

 

3.如何调用用一个类的内部类

一般通过两种方式:第一种:new outer().new inner();第二种:new outer().getInner();通过方法获取;

public class Outer {
    public Inner getInner(){
        return new Inner();
    };
    class Inner{
        private String innerName = "Inner";
        public int innerAge = 14;
    }
}
class Test{
    public static void main(String[] args) {
        Outer.Inner inner = new Outer().new Inner();
        Outer.Inner inner1 = new Outer().getInner();
    }
}

 

 

 参考资料:《effective java》

 

 

 

 

 

 

以上是关于Java嵌套类,内部类和外部类的主要内容,如果未能解决你的问题,请参考以下文章

静态类和内部类的区别是啥

Java内部类

java内部类的静态嵌套类

java 内部类和外部类的关系

java中,类走之间可以嵌套吗?

Java编程思想:嵌套类