zoukankan      html  css  js  c++  java
  • 自学java--4

    1.内部类:

    new产生的对象在堆内存中,内部类可以放在任何地方,比如方法中,if语句等。

    非静态内部类是不能够定义静态的成员。

    静态内部类只能访问静态的外部成员。

    在方法中定义的内部类,如果要访问方法中定义的本地变量或方法的参数,则变量必须被声明final。(重要)
     
    内部类可以声明为private或protected;还可以声明为abstract或final。
     
    内部类可以声明为static的,但此时就不能再使用外部类的非static的成员变量和非static的成员方法;
     
    非static的内部类中的成员不能声明为static的,只有在顶层类或static的内部类中才可声明static成员。
     
    内部类可以继承其他类,也可以被其他类继承(此时要写出他的层次结构,如extends outer.inner)。
     
    内部类常用以匿名类的形式。
     
    我们为什么使用内部类

    1、在内部类(inner class)中,可以随意的访问外部类的成员,这可以让我们更好地组织管理我们的代码,增强代码的可读性。

    2、内部类可以用于创建适配器类,适配器类是用于实现接口的类。使用内部类来实现接口,可以更好地定位与接口关联的方法在代码中的位置。

    内部类可以访问外部类的所有方法和变量(原因:内部类含有个Outer.this保存了外部类的引用)

    class outer
    {
      int index=100;
      class inner
      {
       int index=50;
       void print()
       {
        int index=25;
        System.out.println(index);
        System.out.println(this.index);
        System.out.println(outer.this.index);
        }
       }
       void print()
       {
       inner inner1=new inner();
       inner1.print();
       }
      inner getinner()
      {
       return new inner();
      }
      public static void main(String[] args)
      {
       outer outer1=new outer();
       inner inner1=outer1.getinner();
       inner1.print();
      // inner inner2=new inner();
    //因为main方法为outer类的静态成员,所以无法引用inner这个非静态
    
    成员,无法直接new一个内部类。
       //inner2.print();
      }
    }

    输出结果:25

                  50

                100

    特别提示上例中的getinner()方法只能用在outer类的内部。外部不可以引用。

    另一种方法是:先new一个外部类,然后用outer类对象new一个内部类。例如:

    class outer
    {
      int index=100;
      class inner
      {
       int index=50;
       void print()
       {
        int index=25;
        System.out.println(index);
        System.out.println(this.index);
        System.out.println(outer.this.index);
        }
       }
       void print()
       {
       inner inner1=new inner();
       inner1.print();
       }
      inner getinner()
      {
       return new inner();
      }
     
    }
    
    public class test
    {
     public static void main(String[] args)
     {
      //outer.inner inner1=new out.inner()// false
      outer outer1=new outer();
      outer.inner inner1=outer1.new inner();
      inner1.print();
    }
    }

    结果和上例相同。

    看一个private内部类好处的例子:

    interface Machine
    {
        void run();
    }
    
    class Person
    {
        void run()
        {
            System.out.println("run");
        }
    }
    
    class Robot extends Person
    {
        private class MachineHeart implements Machine
        {
            public void run()
            {
                System.out.println("heart run");
            }
        }
        Machine getMachine()
        {
            return new MachineHeart();
        }
    }
    
    class Test
    {
        public static void main(String[] args)
        {
            Robot robot=new Robot();
            Machine m=robot.getMachine();
            m.run();
            robot.run();
        }
    }
  • 相关阅读:
    汇编代码中db,dw,dd的区别
    利用汇编详解栈结构
    80X86指令总结
    【原创】自己动手写的一个查看函数API地址的小工具
    【初学破解】暴力破解绕过程序认证
    OD基本汇编指令
    排序算法
    数据聚类算法-K-means算法
    数据预测算法-ARIMA预测
    数据预测算法-指数平滑法-1
  • 原文地址:https://www.cnblogs.com/lovelifeloveme/p/3176435.html
Copyright © 2011-2022 走看看