• 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》

     

     

     

     

     

     

  • 相关阅读:
    用命令创建MySQL数据库
    Linux下安装mysql
    MySQL字符集及校对规则的理解
    Mybatis 高级结果映射 ResultMap Association Collection
    查看linux系统版本命令
    hdu 1217 Arbitrage (最小生成树)
    hdu 2544 最短路(两点间最短路径)
    hdu 3371 Connect the Cities(最小生成树)
    hdu 1301 Jungle Roads (最小生成树)
    hdu 1875 畅通工程再续(prim方法求得最小生成树)
  • 原文地址:https://www.cnblogs.com/perferect/p/12614322.html
Copyright © 2020-2023  润新知