public class OuterClass { //成员变量 private String name; private int num = 10; //构造方法 public OuterClass() { } public OuterClass(String name, int num) { this.name = name; this.num = num; } //成员方法 public void methodOut(){ System.out.println("methodOut"); } public void methodOut2(){ //外部类不可以直接访问内部的的成员变量和成员方法 //System.out.println(type); //methodInner(); InnerClass ic = new InnerClass(); System.out.println(ic.num);//20 ic.methodInner(); } //内部类 class InnerClass{ //成员变量 private String type; private int num = 20; //构造方法 public InnerClass() { } public InnerClass(String type, int num) { this.type = type; this.num = num; } //成员方法 public void methodInner(){ //内部类可以直接访问外部类的成员变量 System.out.println(name); int num = 30; System.out.println(num); //30 System.out.println(this.num); //20 //内部类如何访问外部类的同名成员变量 System.out.println(OuterClass.this.num);//10 methodOut(); } } }
public class Test { public static void main(String[] args) { OuterClass oc = new OuterClass(); oc.methodOut(); oc.methodOut2(); //要创建 非静态成员内部类对象,必须先创建外部类的对象 //OuterClass.InnerClass ic = new OuterClass().new InnerClass(); OuterClass oc2 = new OuterClass(); OuterClass.InnerClass ic =oc2.new InnerClass(); } }
public class OuterClass { //成员变量 private static String name; private static int num = 10; //构造方法 public OuterClass() { } public OuterClass(String name, int num) { this.name = name; this.num = num; } //成员方法 public static void methodOut(){ System.out.println("methodOut"); InnerClass ic = new InnerClass(); InnerClass.methodInner2(); } public void methodOut2(){ //外部类不可以直接访问内部的的成员变量和成员方法 InnerClass ic = new InnerClass(); System.out.println(ic.num);//20 ic.methodInner(); InnerClass.methodInner2(); } //内部类 static class InnerClass{ //成员变量 private String type; private int num = 20; //构造方法 public InnerClass() { } public InnerClass(String type, int num) { this.type = type; this.num = num; } //成员方法 public void methodInner(){ //静态内部类只能够访问外部类的静态成员 System.out.println(name); int num = 30; System.out.println(num); //30 System.out.println(this.num); //20 //静态内部类如何访问外部类的同名的成员变量 System.out.println(OuterClass.num);//10 methodOut(); } public static void methodInner2(){
} } }
public class Test { public static void main(String[] args) { //要创建静态成员内部类对象,不需要先创建外部类的对象 OuterClass.InnerClass ic =new OuterClass.InnerClass(); //需要import com.bjsxt.innerclass2.OuterClass.InnerClass;
public class OuterClass { int num1 = 10; public void method(){ int num2 = 20; class InnerClass{ public void method2(){ num1 = 100; System.out.println(num2); //num2 = 200; } } InnerClass ic = new InnerClass(); ic.method2(); } }
public class BookNameComparator implements Comparator1 { @Override public int compare(Object obj1, Object obj2) { Book book1 = (Book)obj1; Book book2 = (Book)obj2; return book1.getBookName().compareTo(book2.getBookName()); } }
public class BookPriceNameComparator implements Comparator1 { @Override public int compare(Object obj1, Object obj2) { Book book1 = (Book)obj1; Book book2 = (Book)obj2; if(book1.getPrice() > book2.getPrice()){ return -1; }else if(book1.getPrice()< book2.getPrice()){ return 1; }else{ return book1.getBookName().compareTo(book2.getBookName()); } } }
如果某个外部比较器只使用一次或者很少的次数,就可以不提供专门的类,而是使用匿名内部类。
(3)使用匿名内部类实现外部比较器
public class Test { public static void main(String[] args) { Comparable comp; Comparator comp2; Book book1 = new Book("倚天屠龙记1","金庸1","清华大学出版社",35); Book book2 = new Book("倚天屠龙记5","金庸5","清华大学出版社",35); int result = book1.compareTo(book2); System.out.println(result);
Comparator1 cmp1 = new BookNameComparator(); result = cmp1.compare(book1,book2); System.out.println(result); Comparator1 cmp2 = new BookPriceNameComparator(); result = cmp2.compare(book1,book2); System.out.println(result);
Comparator1 cmp3 = new Comparator1() { //代码块,每次创建对象的时候执行,并且早于构造方法执行 { System.out.println("--匿名内部类通过代码块完成初始化操作---"); } @Override public int compare(Object obj1, Object obj2) { Book book1 = (Book)obj1; Book book2 = (Book)obj2; return book1.getAuthor().compareTo(book2.getAuthor()); } }; result = cmp3.compare(book1,book2); System.out.println(result); } }
1.非静态成员内部类 public class OuterClass { //成员变量 private String name; private int num = 10; //构造方法 public OuterClass() {} public OuterClass(String name, int num) { this.name = name; this.n...