匿名对象:
是指创建对象的时候,只有创建对象的语句,却没有把对象地址值赋给某个变量
创建一个普通对象:
Person p = new Person();
创建一个匿名对象:
new Person();
注意:
1.匿名对象只能使用一次
2.匿名对象可以作为参数传递
3.匿名对象可以当作方法的返回值
示例:
public class Demo { public static Person getPerson(){ //普通方式 //Person p = new Person(); //return p; //匿名对象作为方法返回值 return new Person(); } public static void method(Person p){} } public class Test { public static void main(String[] args) { //调用getPerson方法,得到一个Person对象 Person person = Demo.getPerson(); //调用method方法 Demo.method(person); //匿名对象作为方法接收的参数 Demo.method(new Person()); } }
内部类:
在类的内部定义类
什么时候需要呢?比如,一个汽车,包含发动机,发动机就可以用内部类来描述
内部类的分类:成员内部类,局部内部类
成员内部类的建立和调用示例:
public class Outer { private int a = 1; //内部类可以使用外部类成员,包括私有 //外部类无法直接使用内部类变量,必须建立内部类对象 class Inner{ public void inner(){ System.out.println("内部类方法"+a); } } }
public class Test { public static void main(String[] args) { //内部类调用格式: Outer.Inner in = new Outer().new Inner(); in.inner(); } }
同名变量的调用问题:
public class Outer { int i = 1; class Inner{ int i =2; public void inner(){ int i = 3; System.out.println(i);//3 System.out.println(this.i);//2 System.out.println(Outer.this.i);//1 } } }
局部内部类:
把一个类写在了一个方法里面
调用方法相对复杂
示例:
public class Outer { public void out(){ class Inner{ public void inner(){ System.out.println("局部内部类方法"); } } Inner inner = new Inner(); inner.inner(); } }
public class Test { public static void main(String[] args) { new Outer().out(); } }
内部类的实际使用:
匿名内部类:
临时定义某一指定类型的子类,定义后立即创建刚刚定义的这个子类对象
示例:
public interface Smoking { public abstract void smoking(); }
public class Test { public static void main(String[] args) { //固定格式 //实际上创建了接口的实现类,重写方法 //这里也可以这样写Smoking s = new Smoking() {}; //然后s.方法调用 new Smoking() { public void smoking() { System.out.println("人在吸烟"); } }.smoking(); //注意这个分号 } }