1.成员内部类(声明在类内部&&方法之外)
class Person{ String name = "韩梅梅"; int age; class Bird{ String name = "黄鹂"; int id; void setName(String name){ System.out.println(name);//方法传入的name-杜鹃 System.out.println(this.name);//Bird对象的name-黄鹂 System.out.println(Person.this.name);//Person对象的name-韩梅梅 } void info(){ show(); } } static class Dog{ } void show(){ System.out.println("我是show()方法"); } public static void main(String[] args) { Person.Dog dog = new Person.Dog();//静态内部类的对象生成方法 Person.Bird bird = new Person().new Bird();//非静态内部类的对象构造方法 bird.info(); bird.setName("杜鹃"); } }
2.局部内部类(声明在方法内部)
class OuterClass{ void method(){ class InnerClass{ } } Comparable getComparable(){//内部类 class MyComparable implements Comparable{ @Override public int compareTo(Object o) { return 0; } }return new MyComparable(); } Comparable getComparable1(){//匿名内部类 return new Comparable() { @Override public int compareTo(Object o) { return 0; } }; } }
3.匿名内部类的应用实例
public class Main3 { public static void main(String[] args) { //该方式类和接口之间的关系清晰便于阅读 Main3 main3 = new Main3(); NoteBook noteBook = new NoteBook(); main3.show(noteBook); //该方式隐匿了类与接口之间的关系 main3.show(new Product() { @Override public void getName() { System.out.println("Iphone5s"); } @Override public void getPrice() { System.out.println("5288"); } }); //该方式隐匿了类的,但接口的操作清晰 Product product = new Product() { @Override public void getName() { System.out.println("Galaxy Note3"); } @Override public void getPrice() { System.out.println("5288"); } }; System.out.println(); Product product1 =main3.getProduct(); product1.getName(); product1.getPrice(); Product product2 =main3.getProduct(); product2.getName(); product2.getPrice(); } void show(Product product){ product.getName(); product.getPrice(); } Product getProduct(){ class Camera implements Product{ @Override public void getName() { System.out.println("数码相机"); } @Override public void getPrice() { System.out.println("400"); } }return new Camera(); } Product getProduct1(){ return new Product(){ @Override public void getName() { System.out.println("电子书"); } @Override public void getPrice() { System.out.println("1000"); } }; } } interface Product{ void getName(); void getPrice(); } class NoteBook implements Product{ @Override public void getName() { System.out.println("HP笔记本"); } @Override public void getPrice() { System.out.println("¥5000"); } }
以上内容来源于谷粒学院java教程第135集。网址http://www.gulixueyuan.com/course/39/task/443/show