看编程思想有点时间了,看到了些在马士兵老师没有讲过的部分,所以打算记录一下
内部类的初始化:
.内部类的初始化和外部类的初始化略有不同,可以使用 外部类对象.new 内部类对象 创建内部类对象
1 package com.github.hellxz.practice10_2_2; 2 3 public class Outer { 4 public String toString() { 5 return "Outer class override toString() method"; 6 } 7 class Inner{ 8 public String toString() { 9 return "Inner class override toString() method"; 10 } 11 } 12 public static void main(String args[]) { 13 //this is wrong way to create inner class instance 14 //! Inner inner = new Outer.Inner(); 15 Outer outer = new Outer(); //create outer instance first ,cuz an inner instance must create on a outer instance 16 Inner inner = outer.new Inner(); //create inner instance. 17 //the declare type also can be Outer.Inner 18 Outer.Inner inner2 = outer.new Inner(); 19 } 20 }
内部类对象返回外部类对象的引用:
.使用 .this 在上边代码的基础上修改代码
1 package com.github.hellxz.test; 2 3 public class Outer { 4 public String toString() { 5 return "Outer class override toString() method"; 6 } 7 class Inner{ 8 //a method to return outer class reference 9 Outer outer() { 10 return Outer.this; 11 } 12 public String toString() { 13 return "Inner class override toString() method"; 14 } 15 } 16 public static void main(String args[]) { 17 Outer outer = new Outer(); 18 System.out.println(outer); //show which reference 19 Inner inner = outer.new Inner(); 20 System.out.println(inner); 21 // use inner class method to return outer class reference 22 //! Inner inner2 = inner.outer(); //it wrong 23 Outer outer2 = inner.outer(); 24 System.out.println(outer2); 25 } 26 } 27 28 //output: 29 //Outer class override toString() method 30 //Inner class override toString() method 31 //Outer class override toString() method
问我为啥注释都英文,因为我这linuxmint的root用户的fcitx好像没装好。在普通用户下正常,一使用root用户就不行,百度好久也没解决,有知道解决方法的老哥评论下告知呗,小弟感激不尽!