6.4.6 匿名内部类
假设使用变量时,直接new一个新对象,就无需再次命名。这种不起类的名字的局部内部类,叫做匿名内部类。
写法是:new 接口名(){覆盖方法(){方法内容}}
public class Main {public static void main(String[] args) throws CloneNotSupportedException, InterruptedException {
Main solution = new Main();
Date d = new Date();
ActionListener tp = new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("the time is"+d);
Toolkit.getDefaultToolkit().beep();
}
};
Timer t = new Timer(10000,tp);
t.start();
JOptionPane.showMessageDialog(null,"Quit program?");
System.exit(0);
}
}
通常使用匿名方式创建的对象,直接放入传参中,像这样:
public class Main {public static void main(String[] args) throws CloneNotSupportedException, InterruptedException {
Main solution = new Main();
Date d = new Date();
Timer t = new Timer(10000,new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("the time is"+d);
Toolkit.getDefaultToolkit().beep();
}
});
t.start();
JOptionPane.showMessageDialog(null,"Quit program?");
System.exit(0);
}
}
6.4.7 静态内部类
静态内部类就是在成员内部类的基础上加一个static。意思是外部类需要引用内部类变量或方法,内部类不需要引用外部类变量和方法。平时用到的大多数内部类,基本上都是使用静态内部类。比如一个订单,有多件商品,我们会问这个订单有哪些商品,但是没有订单,这些商品还存在吗?还是存在的。可以发现不论这个订单存在不存在,它这个关联的内部类依旧存在,这时候就可选用静态内部类的方式。
import java.util.ArrayList;import java.util.List;
public class Order {
private List<Product> products;
private int id;
public Order(int id){
this.id = id;
products = new ArrayList<>();
}
public void addProduct(Product product){
products.add(product);
}
public List<Product> getProductList(){
return products;
}
public static class Product{
String name;
int cnt;
public Product(String name, int cnt){
this.name = name;
this.cnt = cnt;
}
@Override
public String toString() {
return "Product{" +
"name='" + name + '\'' +
", cnt=" + cnt +
'}';
}
}
}public class Main {
public static void main(String[] args) throws CloneNotSupportedException, InterruptedException {
Main solution = new Main();
Order.Product p = new Order.Product("豆腐",1);
Order.Product p2 = new Order.Product("小葱",5);
Order o = new Order(1);
o.addProduct(p);
o.addProduct(p2);
System.out.println(o.getProductList());
}
}
系列内容:
《Java 核心技术 卷1》 笔记:第一章 Java程序设计概述
《Java 核心技术 卷1》 笔记:第二章 Java程序设计环境
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(1)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(2)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(3)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(4)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(5)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(6)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参
《Java 核心技术 卷1》 笔记 第四章:类与对象
《Java 核心技术 卷1》 笔记 第四章:类与对象(2) GregorianCalendar 与 类的基本组成
《Java 核心技术 卷1》 笔记 第四章:类与对象(3) 构造器全局私有方法
《Java 核心技术 卷1》 笔记 第四章:类与对象(4) 静态字段+静态方法+工厂方法
《Java 核心技术 卷1》 笔记 第四章:类与对象(5) 形参与实参 构造器的默认值与默认构造
《Java 核心技术 卷1》 笔记 第四章:类与对象(6) 构造器调用与初始化块
《Java 核心技术 卷1》 笔记 第四章:类与对象(7) 注释、JavaDoc与类设计
《Java 核心技术 卷1》 笔记 第五章 继承
《Java 核心技术 卷1》 笔记 第五章 继承(2)
《Java 核心技术 卷1》 笔记 第五章 继承(3)
《Java 核心技术 卷1》 笔记 第五章 继承(4)equals方法
《Java 核心技术 卷1》 笔记 第五章 继承(5)hashCode 与 toString
《Java 核心技术 卷1》 笔记 第五章 继承(6) 泛型
《Java 核心技术 卷1》 笔记 第五章 继承(7) 包装类和可变数组
《Java 核心技术 卷1》 笔记 第五章 继承(8) 枚举类与类反射
《Java 核心技术 卷1》 笔记 第五章 继承(9) 异常捕获与反射运用
《Java 核心技术 卷1》 笔记 第五章 继承(10)反射
《Java 核心技术 卷1》 笔记 第五章 继承(11)反射泛型数组+方法指针+类设计技巧
《Java 核心技术 卷1》 笔记 第六章 接口和内部类
《Java 核心技术 卷1》 笔记 第六章 接口和内部类(2)
《Java 核心技术 卷1》 笔记 第六章 接口和内部类(3) 接口回调与内部类
《Java 核心技术 卷1》 笔记 第六章 接口和内部类(4) 局部内部类和局部内部类引用方法变量分析
喜欢的话,点个赞吧~!平时做题,以及笔记内容将更新到公众号。
关注公众号,互相学习:钰娘娘知识汇总