当前位置: 首页 > news >正文

【java】【面对对象高级4】内部类、枚举、泛型

目录

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的内部类(静态内部类、局部内部类、匿名内部类)、枚举、泛型的语法使用

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 匿名内部类在开发中实际场景

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);}
}

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 认识泛型

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<String> 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<Cat> list2 = new ArrayList<>();list2.add(new Cat());}
}class Cat{}

3.2 泛型类

3.2.1 如何自己定义泛型类(一般架构师做)

 3.2.2 模仿ArrayList写一个简单的MyArrayList泛型类

package com.runa.staticdemo;// 泛型类
public class MyArrayList<E> {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]; //强转}
}

 3.2.3 写一个定义2个类型的泛型类Myclass2

package com.runa.staticdemo;public class Myclass2<E, T> {public void put(E e, T t){}
}

 3.2.4 MyClass3泛型类,使用继承

package com.runa.staticdemo;public class MyClass3<E extends Animal> {
}

 3.2.5 主函数

package com.runa.staticdemo;public class TestAL {public static void main(String[] args) {MyArrayList<String> list = new MyArrayList<>();list.add("java");list.add("python");String ele = list.get(1);System.out.println(ele);Myclass2<String, String> list2 = new Myclass2<>();MyClass3<Animal> a  = new MyClass3<>();MyClass3<Dog> d  = new MyClass3<>();}
}class  Animal{}
class Dog extends Animal{}
class Cat2 extends Animal{}

3.3 泛型接口

3.3.1 如何写泛型接口

3.3.2 写一个泛型接口

package com.runa.staticdemo;import java.util.ArrayList;//泛型接口
public interface DataE<T> {void add(T t);ArrayList<T> getByName(String name);
}

 3.3.3 学生类StudentE

package com.runa.staticdemo;public class StudentE {
}

3.3.4 老师类TeacherE

package com.runa.staticdemo;public class TeacherE {
}

 3.3.5 实现类TeacherData

package com.runa.staticdemo;import java.util.ArrayList;public class TeacherData  implements DataE<TeacherE>{@Overridepublic void add(TeacherE teacherE) {}@Overridepublic ArrayList<TeacherE> getByName(String name) {return null;}
}

 3.3.6 实现学生类StudentData

package com.runa.staticdemo;import java.util.ArrayList;public class StudentData implements DataE<StudentE>{@Overridepublic void add(StudentE studentE) {}@Overridepublic ArrayList<StudentE> getByName(String name) {return null;}
}

3.4 泛型方法、泛型通配符、上下限

 3.4.1 写一个泛型方法

 3.4.2 一个例子

3.4.2.1 Car类

package com.runa.staticdemo;public class Car {
}

 3.4.2.1 BMW类

package com.runa.staticdemo;public class BMW extends Car{
}

 3.4.2.2 BENZ类

package com.runa.staticdemo;public class BENZ extends Car {
}

 3.4.2.3 主程序

package com.runa.staticdemo;import java.util.ArrayList;public class TestF {public static void main(String[] args) {ArrayList<Car> cars = new ArrayList<>();cars.add(new BMW());cars.add(new BENZ());go(cars);ArrayList<BMW> bmws = new ArrayList<>();bmws.add(new BMW());bmws.add(new BMW());go(bmws);ArrayList<BENZ> benzs = new ArrayList<>();benzs.add(new BENZ());benzs.add(new BENZ());go(benzs);}// 这个没有限定 ,可能将其他对象传进来了
//    public static<T> void go(ArrayList<T> cars){
//
//    }// 这个限定只能是Car或者Car子类
//    public static<T extends Car> void go(ArrayList<T> cars){
//
//    }//    // 通配符
//    public static void go(ArrayList<?> cars){
//
//    }//    // 通配符 + extends Car上限 spuer Car是下限public static void go(ArrayList<? extends Car> cars){}}

3.5 泛型的注意事项:擦除问题、基本数据类型问题

 3.5.1 擦除问题

 查看编译源代码:

 3.5.2 基本数据类型问题

http://www.lryc.cn/news/98360.html

相关文章:

  • Python的用处到底是什么?(三)
  • 【Nodejs】Express基本使用
  • k8s集群安装v1.20.9
  • Staples Drop Ship EDI 需求分析
  • 模型调参及优化
  • 多数据源数据转换和同步的ETL工具推荐
  • 配置 gitlab https 访问
  • Kepware Modbus驱动简介
  • 从零开始学习CTF——CTF是什么
  • 为Android构建现代应用——主体结构
  • 【shell脚本】shell脚本之日志切割(进阶实战三)
  • VMLogin和虚拟机里的浏览器有什么区别?
  • unimrcp server的session资源分配与回收
  • 【图论】三种中心性 —— 特征向量、katz 和 PageRank
  • [sqoop]将hive查询后的数据导入到MySQL
  • Linux df、du命令
  • java版+免费商城搭建+小程序商城免费搭建+Spring Cloud + Spring Boot + MybatisPlus + 前后端分离 + 二次开发
  • 软件设计师学习第一章
  • 蓝桥杯单片机第十一届国赛 真题+代码
  • IDC报告背后:大模型时代,重新理解AI公有云
  • UNH-IOL Reservation 一致性测试用例【7】- 清除Reservation
  • Python 生成随机图片验证码
  • 一些有趣的 js 功能函数
  • 摄像头m2dock(MAIX-II DOCK)
  • SpringBoot 如何优雅的进行全局异常处理
  • OSPF路由协议(红茶三杯CCNA)
  • redis中使用bloomfilter判断元素是否存在
  • 互联网医院系统源码实现:打造现代化医疗服务平台
  • 每天100w次登陆请求, 8G 内存该如何设置JVM参数?
  • Fiddler Everywhere(TTP调试抓包工具) for Mac苹果电脑版