目录
1、内部类
1.1 成员内部类【了解】
1.1.1 定义
1.1.2 扩展变量
1.2 静态内部类【了解】
1.2.1 定义
1.2.2 扩展变量
1.3 局部内部类【了解】
1.4 匿名内部类【重点】
1.4.1 定义
1.4.1.1 常规写法
1.4.1.2 匿名内部类改造
1.4.2 匿名内部类的常见使用场景
1.4.2.1 作为一个参数传输给方法
1.4.2.2 匿名内部类在开发中实际场景
2、枚举类
2.1 认识枚举
2.2 枚举类特点
2.3 抽象枚举
2.4 枚举实现单例模式
2.5 枚举的应用场景
2.5.1 常规做法1:
2.5.2 常规做法2-常量方式
2.5.3 枚举实现
3、泛型
3.1 认识泛型
3.2 泛型类
3.2.1 如何自己定义泛型类(一般架构师做)
3.2.2 模仿ArrayList写一个简单的MyArrayList泛型类
3.2.3 写一个定义2个类型的泛型类Myclass2
3.2.4 MyClass3泛型类,使用继承
3.2.5 主函数
3.3 泛型接口
3.3.1 如何写泛型接口
3.3.2 写一个泛型接口
3.3.3 学生类StudentE
3.3.4 老师类TeacherE
3.3.5 实现类TeacherData
3.3.6 实现学生类StudentData
3.4 泛型方法、泛型通配符、上下限
3.4.1 写一个泛型方法
3.4.2 一个例子
3.4.2.1 Car类
3.4.2.1 BMW类
3.4.2.2 BENZ类
3.4.2.3 主程序
3.5 泛型的注意事项:擦除问题、基本数据类型问题
3.5.1 擦除问题
3.5.2 基本数据类型问题
前言:java的内部类(静态内部类、局部内部类、匿名内部类)、枚举、泛型的语法使用
简化一下:
package com.runa.staticdemo;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestDesk {
public static void main(String[] args) {
JFrame win =new JFrame("登录界面");
JPanel panel = new JPanel();
win.add(panel);
JButton btn = new JButton("登录");
panel.add(btn);
// 给按钮绑定单击事件
// btn.addActionListener(new ActionListener() {
// @Override
// public void actionPerformed(ActionEvent e) {
// JOptionPane.showMessageDialog(win,"登录成功~");
// }
// });
// 最终目的是简化代码
btn.addActionListener(e -> JOptionPane.showMessageDialog(win,"登录成功~"));
win.setSize(400,400);
win.setLocationRelativeTo(null);
win.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
win.setVisible(true);
}
}
package com.runa.staticdemo;
import java.util.ArrayList;
public class TestE {
public static void main(String[] args) {
// ArrayList list = new ArrayList<>();
// list.add("小马");
// list.add("次奥");
// list.add("小曹");
// list.add(new Cat());
//
// for (int i = 0; i < list.size(); i++) {
// String e = (String) list.get(i);
// System.out.println(e);
System.out.println("-------------------------------------");
ArrayList list1 = new ArrayList<>();
list1.add("小米");
list1.add("小马");
list1.add("字符串");
// list1.add(new Cat());
for (int i = 0; i < list1.size(); i++) {
String e = (String) list1.get(i);
System.out.println(e);
}
System.out.println("-------------------------------------");
ArrayList list2 = new ArrayList<>();
list2.add(new Cat());
}
}
class Cat{
}
package com.runa.staticdemo;
// 泛型类
public class MyArrayList {
private Object[] arr = new Object[10];
private int size;
public boolean add(E e){
arr[size++] = e;
return true;
}
public E get(int index){
return (E) arr[index]; //强转
}
}
package com.runa.staticdemo;
public class Myclass2 {
public void put(E e, T t){
}
}
package com.runa.staticdemo;
public class MyClass3 {
}
package com.runa.staticdemo;
public class TestAL {
public static void main(String[] args) {
MyArrayList list = new MyArrayList<>();
list.add("java");
list.add("python");
String ele = list.get(1);
System.out.println(ele);
Myclass2 list2 = new Myclass2<>();
MyClass3 a = new MyClass3<>();
MyClass3 d = new MyClass3<>();
}
}
class Animal{
}
class Dog extends Animal{
}
class Cat2 extends Animal{
}
package com.runa.staticdemo;
import java.util.ArrayList;
//泛型接口
public interface DataE {
void add(T t);
ArrayList getByName(String name);
}
package com.runa.staticdemo;
public class StudentE {
}
package com.runa.staticdemo;
public class TeacherE {
}
package com.runa.staticdemo;
import java.util.ArrayList;
public class TeacherData implements DataE{
@Override
public void add(TeacherE teacherE) {
}
@Override
public ArrayList getByName(String name) {
return null;
}
}
package com.runa.staticdemo;
import java.util.ArrayList;
public class StudentData implements DataE{
@Override
public void add(StudentE studentE) {
}
@Override
public ArrayList getByName(String name) {
return null;
}
}
package com.runa.staticdemo;
public class Car {
}
package com.runa.staticdemo;
public class BMW extends Car{
}
package com.runa.staticdemo;
public class BENZ extends Car {
}
package com.runa.staticdemo;
import java.util.ArrayList;
public class TestF {
public static void main(String[] args) {
ArrayList cars = new ArrayList<>();
cars.add(new BMW());
cars.add(new BENZ());
go(cars);
ArrayList bmws = new ArrayList<>();
bmws.add(new BMW());
bmws.add(new BMW());
go(bmws);
ArrayList benzs = new ArrayList<>();
benzs.add(new BENZ());
benzs.add(new BENZ());
go(benzs);
}
// 这个没有限定 ,可能将其他对象传进来了
// public static void go(ArrayList cars){
//
// }
// 这个限定只能是Car或者Car子类
// public static void go(ArrayList cars){
//
// }
// // 通配符
// public static void go(ArrayList> cars){
//
// }
// // 通配符 + extends Car上限 spuer Car是下限
public static void go(ArrayList extends Car> cars){
}
}
查看编译源代码: