首页 > 其他 > 详细

内部类

时间:2019-04-26 19:45:59      阅读:117      评论:0      收藏:0      [点我收藏+]

概念:在java中,一个类也可以定义在一个类的内部,定义在内部的类称为内部类(inner class),定义在外部的类称为外部类(out class)

语法:

public class Outer {
    
    [修饰符] class Inner{
        
    }
}

经过编译后这两个类是平行关系

技术分享图片

分类:

一:成员内部类

上面的例子就是成员内部类,成员内部类一般都用默认修饰符

(1)内部类怎么创造对象呢

public class Test01 {
    public static void main(String[] args) {
        
        // 【1】先创建外部类对象
        Outer outer = new Outer();
        // 【2】创建内部类对象
        Inner inner = outer.new Inner();
        inner.showInfo();
    }
}

(2)内部类可以访问外部类的私有成员变量(原理:作用域作用)

public class Outer {
    
    private String name = "Outer";
    
    class Inner{
        
        public void showInfo() {
            System.out.println(name);
        }
        
    }
}

特殊情况:如果内部类变量名和外部类变量名相同,那访问形式是

public class Outer {
    
    private String name = "Outer";
    
    class Inner{
        
        private String name = "Inner";
        
        public void showInfo() {// 访问外部类的私有成员
            System.out.println(this.name);
            
            // 访问外部类的私有成员
            System.out.println(Outer.this.name);
            
        }
    }
}

二:静态内部类

也就是内部类被static修饰符修饰了

(1)创建静态内部类

public class Test01 {
    public static void main(String[] args) {
        
        Inner inner = new Outer.Inner();
        inner.showInfo();
    }
}

(2)静态内部类可以访问外部内的(私有)静态成员

public class Outer {
    
    private static String name = "Outer";
    
    static class Inner{
        
        public void showInfo() {
            System.out.println("showInfo");
            
            System.out.println(name);
        }
    }
}

三:方法内部类

将类定义到方法中

public class Outer {
    
    public void print() {
        
        class Inner{        
            public void showInfo() {
                System.out.println("show info");
            }
        }
         
        Inner inner = new Inner();
        inner.showInfo();
    }
}

注意:如果方法中的变量进入该内部类,那么自动被final修饰变成常量

public class Outer {
    
    public void print(int b) {
        
        int a = 10;
        
        class Inner{
            
            public void showInfo() {
                System.out.println("show info");
                
                System.out.println("print() ->a:"+10);
                
                // 在方法内部类中不能修改方法的局部变量(final)
                // a = 20;
                // b = 20;
            }
        }
        
        a = 20;
        
        Inner inner = new Inner();
        inner.showInfo();
    }
}

四:匿名内部类

如果要使用的类未来只会用到一次,那么可以声明该类为匿名的

*匿名内部类一定要实现接口

package cn.sxt01.inner04;

public class Outer {
    
    public void print() {
        
        // 方法内部类
        /*class Inner implements MyInterface{

            @Override
            public void showInfo() {
                System.out.println("Inner:showInfo");
            }
            
        }*/
        
        /*Inner inner = new Inner();
        inner.showInfo();*/
        
        // new Inner().showInfo();
        
        // 匿名内部类
        new MyInterface(){
            @Override
            public void showInfo() {
                System.out.println("Inner:showInfo");
            }
        }.showInfo();
        
    }
}

 

内部类

原文:https://www.cnblogs.com/zhangxiong-tianxiadiyi/p/10776145.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!