码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-04-01 19:11:03      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:16px   oid   参考资料   rgs   并且   this   除了   ret   种类   

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嵌套类,内部类和外部类

标签:16px   oid   参考资料   rgs   并且   this   除了   ret   种类   

原文地址:https://www.cnblogs.com/perferect/p/12614322.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!