package new20140513;
/**
* 抽象父类
* @author x
*
*/
abstract class Device
{
private String name;
//抽象方法
public abstract double getPrice();
public Device(){}
public Device(String name)
{
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/**
* 匿名内部类
* @author x
*
*/
public class Test3 {
public void test(Device d)
{
System.out.println("购买:"+d.getName()+",单价:"+d.getPrice());
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Test3 test3=new Test3();
//调用有参数的构造器创建Device匿名实现类的对象
test3.test(new Device("联想PC") {
@Override
public double getPrice() {
// TODO Auto-generated method stub
return 4999;
}
});
//调用无参数的构造器创建Device匿名实现类的对象
Device d=new Device() {
//初始化块
{
System.out.println("匿名内部类的初始化块...");
}
//实现抽象方法
@Override
public double getPrice() {
// TODO Auto-generated method stub
return 99;
}
//重写父类的实例方法
@Override
public String getName() {
// TODO Auto-generated method stub
return "POC";
}
};
test3.test(d);
}
}
输出结果
购买:联想PC,单价:4999.0
匿名内部类的初始化块...
购买:POC,单价:99.0
package new20140513;
interface A {
void test();
}
/**
* 匿名内部类访问局部变量 ——必须使用final修饰
*
* @author x
*
*/
public class Test4 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int age = 18;
final String name = "Tom";
// System.out.println(name);
A a = new A() {
@Override
public void test() {
// TODO Auto-generated method stub
System.out.println(name);
// 一下错误
// System.out.println(age);
}
};
}
}