------------android培训 、java培训 、期待与您交流------------
构造格式:
new 父类类名(抽象类或者普通类都可以,接口名)(形参可有可没有根据父类和需要而定){实现部分};
如果父类是抽象类或者接口,则必须实现全部的抽象方法,所以一般对于父类中抽象方法有3个以上的最好不要用匿名内部类。对于其他方法则根据需要进行重写。
匿名内部类不能创建构造函数(只有一个隐式的构造函数),因为没有名字,但是会拥有和父类相似的构造器,即具有和父类相同的形参。而且可以构造代码块进行初始化操作。
对于经常要调用其方法的情况,一般要给其命名,即以父类进行实例化匿名内部类,但是调用的时候只能调用父类中拥有的方法,对于父类中没有的方法是不能调用
代码:
package com.itheima;
abstract class Product {
private String name;
public Product() {
}
public Product(String name) {
this.setName(name);
}
public abstract Double getPrice();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Customer {
private String name;
public Customer(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
void note(Product p) {
System.out.println("买了一个" + p.getName() + ",花了" + p.getPrice());
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Customer customer = new Customer("王女士");//创建一个顾客对象
System.out.println("customer");
customer.note(new Product("iphone") {//运用匿名内部类作为参数实例对象
public Double getPrice() {
return (double) 6000;
}
});
System.out.println("5 minutes later");
Product p = new Product(){
{
System.out.println("----珠宝店---");//匿名内部类的初始化块
}
public Double getPrice(){//对抽象方法进行具体实现
return (double)20000;
}
public String getName(){//重写方法(多态)
return "ring";
}
};
customer.note(p);
}
}
运行结果:
customer
买了一个iphone,花了6000.0
5 minutes later
----珠宝店---
买了一个ring,花了20000.0