黑马程序员-Java之匿名内部类

本文详细介绍了Java中匿名内部类的使用方法,包括构造格式、注意事项及应用场景。通过具体示例展示了如何利用匿名内部类实现对象的创建与方法的重写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------------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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值