说起内部类,刚开始还有点晕,后来慢慢看懂了。
其实内部类还是可以拿手机做对比,类是一整台手机的抽象,类就是里面某一个部件的抽象。
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可以直接获得手机的电力
时间: 2024-11-13 09:51:15