zoukankan      html  css  js  c++  java
  • Java中的内部类

    一、总结

    1.内部类简介
    在一个类的内部重新定义一个新类就称为内部类。

    内部类分为三种:
    (1) 普通内部类:唯一好处就是可以访问外部类的私有属性

    (2) 静态内部类:在普通内部类前面加static修饰。static内部类的唯一好处就是可以直接访问外部类的静态私有属性。

    (3) 匿名内部类:假若一个类只使用一次,那么定义成匿名内部类比较省事。

    使用:
    普通内部类首先要实例化一个外部类对象,然后通过外部类对象实例化一个内部类对象。即使内部类中的所有的方法都没有访问外部类的属性,也需要遵守这个规则。
    静态内部类可以直接通过“外部内.内部类 对象 = new 外部内.内部类()”来实例化对象,eg:Outer.Inner i = new Outer.Inner();

    2.内部类加static修饰,此时这个内部类就变成了外部类,它变为只能访问外部类的static的属性(eg: private static int a;)。此时可以不通过外部类直接创建内部类。

    3.所有的static内部类只能访问外部类的static属性。类的static属性无论类是否实例化了对象都是存在的。不能通过实例化的对象.new 一个静态内部类,因为静态内部类不属于任何一个对象。

    4.Android中大量使用static的内部类。

    5.只有在内部类中才允许使用static修饰类,普通的类不可以是用static修饰。eg: 在一个类的内部是正确的,普通类是错误的 static class Stub { }

    二、试验Demo

    /*InnerDemo.java*/
    
    class Outer {
        private int a = 10;
        class Inner {
            public void printInfo(){
                System.out.println("a = "+a);
            }
        }
        
    }
    
    public class InnerDemo {
        public static void main(String args[]) {
            Outer o = new Outer();
            Outer.Inner i = o.new Inner();
            i.printInfo();
        }
    }
    /*InnerDemo2.java: Static Inner class*/
    
    class Outer {
        private static int a = 10;
        static class Inner {
            public void printInfo(){
                System.out.println("a = "+a);
            }
        }
        
    }
    
    public class InnerDemo2 {
        public static void main(String args[]) {
            //Outer o = new Outer();
            //Outer.Inner i = o.new Inner(); //This is error of static inner class
            Outer.Inner i = new Outer.Inner();
            i.printInfo();
        }
    }
    /*InnerDemo3.java: Anonymous inner class*/
    
    interface A {
        public void printInfo();
    }
    
    class B implements A {
        public void printInfo() {
            System.out.println("Hello, world!");
        }
    }
    
    
    public class InnerDemo3 {
        public static void main(String args[])    {
            testFunc(new B());
            testFunc(new A(){ //new A()的同时进行实例化
                public void printInfo() {
                    System.out.println("Hello, world2!");
                }
                });
        }
    
        public static void testFunc(A a) {
            a.printInfo();
        }
    }
  • 相关阅读:
    Excel中删除含有空值的整行或是整列
    Power Pivot(二)
    Power Pivot(一)
    携程数据清洗
    Matplotlib基础绘图
    Pandas 数据清洗常见方法
    天猫美妆数据清洗步骤概括
    淘宝美妆双十一数据可视化(下)
    淘宝美妆双十一数据清洗(上)
    乐高天猫旗舰店数据分析
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/10425525.html
Copyright © 2011-2022 走看看