匿名对象2种使用情况:
new Person().run(); //当对方法仅一次调用
show(new Person());//作为实际参数传递
================================
匿名内部类:其实就是实现了接口、抽象、具体类中的子类而已。
匿名内部类的产生 :
传统编程模式:
class NoNameDemo
{
public static void main(String args[]){
WomenStar w=new WomenStar(); //步骤3:创建对象
TuHao t=new TuHao();
t.marry(w);
}
}
interface WEB
{
public void white();
}
//步骤1:实现接口
class WomenStar implements WEB
{
public void white(){
System.out.println("女明星很白"); //步骤2:重写方法
}
}
class TuHao
{
public void marry(WEB w){
w.white();
}
}
结果:
D:\java2>javac NoNameDemo.java
D:\java2>java NoNameDemo
女明星很白
有了匿名内部类之后的编程模式是:
实现接口、创建对象、重写方法3个步骤一气呵气
class NoNameDemo
{
public static void main(String args[]){
//WomenStar w=new WomenStar();
TuHao t=new TuHao();
t.marry(new WEB(){
public void white(){
System.out.println("匿名内部类改进后,女明星也很白!");
}
});//实现接口、重写方法、创建对象一气呵成
}
}
interface WEB
{
public void white();
}
class WomenStar implements WEB
{
public void white(){
System.out.println("女明星很白");
}
}
class TuHao
{
public void marry(WEB w){
w.white();
}
}
结果:
D:\java2>javac NoNameDemo.java
D:\java2>dir
NoNameDemo$1.class
NoNameDemo.class
NoNameDemo.java
TuHao.class
WEB.class
WomenStar.class
D:\java2>javap NoNameDemo$1
Compiled from "NoNameDemo.java"
final class NoNameDemo$1 extends java.lang.Object implements WEB{
NoNameDemo$1();
public void white();
}
D:\java2>java NoNameDemo
匿名内部类改进后,女明星也很白!
======================================
匿名内部类可以是针对接口、抽象类、具体类,前面是针对接口的内名内部类。
下面是针对抽象类的匿名内部类
class NoNameDemo
{
public static void main(String args[]){
Pet p=new Pet(){
public void meng(){
System.out.println("匿名内部类,宠物蒙蒙哒!");
}
};
p.meng();
}
}
abstract class Pet{
abstract public void meng();
}
结果:
D:\java2>javac NoNameDemo.java
D:\java2>dir
NoNameDemo$1.class
NoNameDemo.class
NoNameDemo.java
Pet.class
D:\java2>javap NoNameDemo$1
Compiled from "NoNameDemo.java"
final class NoNameDemo$1 extends Pet{
NoNameDemo$1();
public v