zoukankan      html  css  js  c++  java
  • 内部类

    内部类

    内部类是写在类里面的类,在一个类中,还可以定义多个类,内部类可以直接直接获取外部类中的所有属性和方法,就算是私有属性也可以获得。如果说继承像父亲和儿子,那外部类和内部类的关系就像丈夫和妻子,只不过这里是一夫多妻制。内部类像妻子,可以直接使用外部内中所有东西。但内部类不是个称职的妻子,外部内不能使用内部类中的属性和方法。(除了类中的类,还有写在方法中的类,叫做局部内部类。但不推荐使用。)

    内部类就是在一个类中再定义一个类,这个类可以直接使用外部类中的所有方法和属性,但如果内部类被static修饰的,会比外部类更早生成,这样就不能使用外部类的东西了。在调用内部类时,需要先初始化外部类,再用外部类来调用内部类。

    调用方法,先实例化外部类后:

    外部类 . 内部类 对象 = 外部类 . new 内部类();

     

    创建内部类

    package oop.Demo08;

    //外部类
    public class Outer {
      private int ID = 5;
      public void go (){
          System.out.println("外部类");
      }


      //内部类
      public class Inner{
          public void in (){
              System.out.println("内部类");
          }

          public void gatID(){
              System.out.println(ID);//可以直接获取到外部类的私有属性
          }
      }
    }

    测试类

    package oop;

    import oop.Demo08.Outer;

    public class Application {
      public static void main(String[] args) {

          Outer outer = new Outer();//实例化外部类

          Outer.Inner inner = outer.new Inner();//通过外部类再实例化内部类

          outer.go();//输出外部类的方法
          inner.in();//输出内部类的方法
          inner.gatID();//输出内部类获取到外部类的私有属性的方法
      }
    }

    多种不同的内部类

    1. 内部类还可以写在一个类的外面,不被外部内所包含,相当于一个类的界面出现两个类。由于class可以定义无数个,但public class只能定义一个,所以没有public的类就被当做内部类,这种类不能直接调用外部内的私有属性和方法。但可以正常的使用main方法,一般作为测试类使用。

    package oop.Demo08;

    //外部类
    public class Outer {
       private int ID = 5;
       public void go (){
           System.out.println("外部类");
    }
    }//外部内的大括号截止到这里

    //写在外面的内部类
    class Cc{
       public static void main(String[] args) {

      }
    }

     

    2. 写在方法中的变量,叫局部变量。所以,写在方法中的内部类,叫做局部内部类。局部内部类中还可以在定义方法和内部类。

    package oop.Demo08;

    //外部类
    public class Outer {
       private int ID = 5;
       public void go (){
           System.out.println("外部类");
      }


       //内部类
       public class Inner{
           public void in (){//内部类中的方法
                class Aaa{//在方法中再创建内部类
                    public void aaa(){//再在这个内部类中创建方法
                        class Aaa2{//再来一个内部类
                            public void aaa2(){//然后再来一个方法
                                System.out.println(ID);//输出外部类的私有属性
                            }
                        }
                    }
              }
               System.out.println("内部类");
          }

           public void gatID(){
               System.out.println(ID);//可以直接获取到外部类的私有属性
          }
      }
    }

    可以看出,在方法中无论定义多少个局部内部类和方法,都可以照常输出外部内的私有属性和私有方法。

     

    3. 匿名内部类:一个不需要名字的类,在实例化的时候,不使用 (对象类型 对象名 = new 类名())的方式,可以直接(new 类名().【需要调用的类成员】())方式直接调用。这样的形式就是创建了一个匿名内部类。

    package oop;

    public class Application {//测试类
       public static void main(String[] args) {
           new A().a();//通过该方法创建了一个匿名内部类
      }
    }

    class A{//创建一个类(不一定必须创建内部类)
       public void a(){
           System.out.println("匿名内部类");
      }
    }

     

  • 相关阅读:
    LIB和 DLL区别
    C++ STL总结
    浅谈static和extern关系
    死锁及处理
    函数模板与模板函数
    Linux无法启动httpd_正在启动httpd
    httpd不允许远程连接问题
    虚拟机UUIDexist_更改UUID
    MySQL远程连接丢失问题
    Apache服务端允许跨域
  • 原文地址:https://www.cnblogs.com/jinweichaoyouqu/p/14015033.html
Copyright © 2011-2022 走看看