zoukankan      html  css  js  c++  java
  • java基础之内部类

    内部类的主要分类有:1.成员内部类,2.局部内部类,3.静态内部类,4.匿名内部类。下面一一进行说明:
    1.成员内部类。
    作为外部类的一个成员存在,可以访问外部类的所有属性和方法(privated),实例化过程:作为外部类的一个成员存在,你想一般访问一个类的成员变量,必须先实例化该类,然后再进行访问。所以访问内部类是必须先实例化外部类。
    举例:

    package day03; 
    /** 
     * @author wangpei 
     * @version 
     *创建时间:2017年3月2日 上午9:16:38 
     * 类说明 
     */
    public class Outer {
        private int a;
        public void printOuter(){
            System.out.println("这是Outer");
        }
        class Inner{
            public void printInner(){
                System.out.println("这是Inner");
            }
            public int getA(){
                return Outer.this.a;//return a;
            }
    
    
        }
        public static void main(String[] args) {
            Outer ot=new Outer();
            Outer.Inner a=ot.new Inner();
            System.out.println(a.getA());
    
        }
    
    }
    

    注意:当外部类与内部类中的变量重名时,外部内中的变量会被隐藏,在内部类里边调用时,肯定调用的是内部类里边的变量需要通过Outer.this.变量名来访问外部类中的变量
    举例:

    package day03; 
    /** 
     * @author wangpei 
     * @version 
     *创建时间:2017年3月2日 上午9:16:38 
     * 类说明 
     */
    public class Outer {
        private int a=1;
        public void printOuter(){
            System.out.println("这是Outer");
        }
        class Inner{
            int a=5;
            public void printInner(){
                System.out.println("这是Inner");
            }
            public int getA(){
                return a;//Outer.this.a;
            }
    
    
        }
        public static void main(String[] args) {
            Outer ot=new Outer();
            Outer.Inner a=ot.new Inner();
            System.out.println(a.getA());
    
        }
    
    }
    

    2.局部内部类
    局部内部类是在方法内部定义的类,相当于方法的局部变量。
    注意:局部内部类是在方法内部进行实例化,然后通过实例化外部类来调用该方法达到调用内部类的目地。

    package day03; 
    /** 
     * @author wangpei 
     * @version 
     *创建时间:2017年3月2日 上午9:16:38 
     * 局部内部类
     */
    public class Outer {
        //private int a=1;
        public void printOuter(){
            int a=5;
            class Inner{
                public void getA(){
                    System.out.println(a+1);
                }
            }
            Inner In = new Inner();
            In.getA();
        }
    
        public static void main(String[] args) {
            Outer ot=new Outer();
            ot.printOuter();
    
    
        }
    
    }
    

    3.静态内部类
    使用static修饰的内部类。
    <1>静态内部类可以直接被外部类调用,而不用实例化外部类。
    <2>静态内部类不能访问外部类中非静态的成员和方法。

    package day03; 
    /** 
     * @author wangpei 
     * @version 
     *创建时间:2017年3月2日 上午9:16:38 
     * 类说明 
     */
    public class Outer {
        private static int a=0;
        public void printOuter(){
            System.out.println("这是Outer");
        }
         static class Inner{
            public void printInner(){
                System.out.println("这是Inner");
            }
            public int getA(){
                //return a;//此处这样访问会报错,必须将设置为static
                return a;
    
            }
    
    
        }
        public static void main(String[] args) {
            //Outer ot=new Outer();
            Outer.Inner a=new Outer.Inner();//直接实例化,不用通过实例化Outer再实例化
            System.out.println(a.getA());
    
        }
    
    }
    

    4.匿名内部类
    主要是在定义监听器时使用,因为java类实现的是单继承,定义匿名类,可以对多继承做补充。
    注意:匿名内部类不可以被static,访问修饰符修饰。匿名内部类没有构造方法。

  • 相关阅读:
    阻止事件冒泡和默认行为,禁止键盘事件
    jquery移除、绑定、触发元素事件
    HTML`CSS_网站页面不同浏览器兼容性问题解决
    computed属性与methods、watched
    call()方法和apply()方法用法总结
    push()、shift()与pop()、unshift()、splice()
    vue指令总结
    fieldset标签
    mysql存储过程定义者
    数据库死锁
  • 原文地址:https://www.cnblogs.com/wangxiaopei/p/8551244.html
Copyright © 2011-2022 走看看