码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA学习记录②——内部类的总结

时间:2015-08-13 19:28:10      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

说起内部类,刚开始还有点晕,后来慢慢看懂了。

其实内部类还是可以拿手机做对比,类是一整台手机的抽象,类就是里面某一个部件的抽象。

1.这是一个最简单的例子:

/*
 * 下面是一整台抽象的手机
 */
class phone{
    float cpu= 1.2f;
    
    //内部类:cpu类表示了手机里面抽象的cpu
    class cpu{
        //cpu应该能做的事
        void print(){
            System.out.println("Cpu works!");
        }
    }
}

public class HelloWorld {
    public static void main(String[] agrs){
        //先将手机实体化,变成了iPhone
        phone iPhone = new phone();
        //iPhone的cpu也实体化
        phone.cpu gaoTong = iPhone.new cpu();
        gaoTong.print();
    }
}

 

2.要是内部类和外部类变量重名了怎么办?

class phone{
    
    //外部的cpu变量
    float cpu= 1.2f;
    
    class cpu{
        
        //内部的cpu变量
        float cpu = 1.5f;
        
        void print(){
            System.out.println("Cpu works!");
            
            //内部的什么都不用加就可以直接读取
            System.out.println(this.cpu);
            //外部的需要加phone.this
            System.out.println(phone.this.cpu);            
        }
    }
}

public class HelloWorld {
    public static void main(String[] agrs){
        
        phone iPhone = new phone();
        phone.cpu gaoTong = iPhone.new cpu();
        
        gaoTong.print();
    }
}

 结果是:

Cpu works!
1.5
1.2

于是发现访问内部的变量不需要进行操作(this不加也是可以的),然而外部的需要加上phone.this

 

3.如果内部类被static了呢?

class phone{
    
    static float cpu = 1.5f;
    
    static class cpu{
        float cpu = 1.5f;
        void print(){
            System.out.println(cpu);
            
            //内部想要访问外部的东西,外部一定得是static的
            System.out.println(phone.cpu);    
        }
    }
}

public class HelloWorld {
    public static void main(String[] agrs){
        
        /*和之前有什么不一样吗?
         * 因为内部类static之后,phone.cpu是一个整体
         * 对象直接可以new出来
         */
        phone.cpu gaoTong = new phone.cpu();
        
        gaoTong.print();
    }
}

结果是:

1.5
1.2

 

 4.那么内部类被private了呢?

class phone {

    private float cpu = 1.2f;

    private class cpu {
        private float cpu = 1.5f;

        private void cpuPrint() {

            System.out.println(cpu);
        }
    }

    //用一个phone的方法,调用内部类cpu的变量
    public void print() {
        new cpu().cpuPrint();
    }
}

public class HelloWorld {
    public static void main(String[] agrs){
        
        //于是这里就不用new内部类了
        phone iPhone = new phone();
        iPhone.print();
    }
}

结果是:

1.5

总结:

内部类的好处是能够直接访问外部类的元素,即使是private的,就好像cpu可以直接获得手机的电力

 

JAVA学习记录②——内部类的总结

标签:

原文地址:http://www.cnblogs.com/pthfly/p/4727839.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!