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

news2024/11/17 3:44:25

目录

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>{
    @Override
    public void add(TeacherE teacherE) {
        
    }

    @Override
    public 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>{
    @Override
    public void add(StudentE studentE) {
        
    }

    @Override
    public 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.coloradmin.cn/o/800459.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

超卖等高并发秒杀场景的问题及解决方案

超卖等高并发秒杀场景的问题及解决方案 1. 超卖问题&#xff08;多人秒杀&#xff09;1.1 原因1.2 解决方案1.3 总结 2. 锁失效问题&#xff08;单人重复抢&#xff09;2.1 原因2.2 解决方案 3. 事务边界问题&#xff08;单人重复抢&#xff09;3.1 原因3.2 解决方案3.3 总结 4…

【踩坑】三种方式解决 Homebrew failing to install - fatal: not in a git directory

问题描述 解决方法一 添加安全目录&#xff0c;没有测试。 git config --global --add safe.directory /opt/homebrew/Library/Taps/homebrew/homebrew- git config --global --add safe.directory /opt/homebrew/Library/Taps/homebrew/homebrew-cask 解决方法二 取消挂载这…

Redis 主从同步原理

一、什么是主从同步&#xff1f; 主从同步&#xff0c;就是将数据冗余备份&#xff0c;主库&#xff08;Master&#xff09;将自己库中的数据&#xff0c;同步给从库&#xff08;Slave&#xff09;。 从库可以一个&#xff0c;也可以多个&#xff0c;如图所示&#xff1a; 二…

Acwing.291 蒙德里安的梦想

题目 求把NM的棋盘分割成若干个12的的长方形&#xff0c;有多少种方案。 例如当N2&#xff0c;M4时&#xff0c;共有5种方案。当N2&#xff0c;M3时&#xff0c;共有3种方案。如下图所示: 输入格式 输入包含多组测试用例。 每组测试用例占一行&#xff0c;包含两个整数N和M…

STM32 CAN通讯实验程序

目录 STM32 CAN通讯实验 CAN硬件原理图 CAN外设原理图 TJA1050T硬件描述 实验线路图 回环实验 CAN头文件配置 CAN_GPIO_Config初始化 CAN初始化结构体 CAN筛选器结构体 接收中断优先级配置 接收中断函数 main文件 实验现象 补充 STM32 CAN通讯实验 CAN硬件原理图…

JavaScript的函数中this的指向

JavaScript的函数中this的指向 JavaScript 语言之所以有 this 的设计&#xff0c;跟内存里面的数据结构有关系。 以下例子来简单描述this在不同情况下所指向的对象。 var obj {aa: function(){console.log(this.num)},num: 5 };var aa obj.aa; var num 10;obj.aa(); // …

简要介绍 | 走向自然的身份认证:步态识别技术简介

注1&#xff1a;本文系“简要介绍”系列之一&#xff0c;仅从概念上对步态识别进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解。 走向自然的身份认证&#xff1a;步态识别技术简介 Gait Recognition Based on Deep Learning: A Survey | ACM Computing Surveys 背景…

一文谈谈Git

"And if forever lasts till now Alright" 为什么要有git&#xff1f; 想象一下&#xff0c;现如今你的老师同时叫你和张三&#xff0c;各自写一份下半年的学习计划交给他。 可是你的老师是一个极其"较真"的人&#xff0c;发现你俩写的学习计划太"水&…

【弹力设计篇】聊聊异步通讯设计

为什么需要异步设计 刚开始参加工作&#xff0c;发现有一些API设计中回落数据之后&#xff0c;然后将数据写入到消息队列中&#xff0c;当时很是不理解为什么要这么做&#xff0c;直到后边系统学习消息队列之后才发现原来这其实就是异步处理&#xff0c;当流量很多的时候&…

一张表中几列字段以不同的条件规则去统计计数展示实现思路设计

今天在写一个业务的时候&#xff0c;遇到这样一个需求 一、需求描述 一张表中其中几列字段需要以不同的条件规则去统计计数&#xff0c;求实现方式 因为项目业务涉及隐私&#xff0c;我就想了一个类似的情景 二、情景描述 有一张月考成绩表&#xff0c;包含学生和他的各科…

区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归多输入单输出区间预测

区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归多输入单输出区间预测 目录 区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归多输入单输出区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRBiGRU双向门控循环单元分位数回归…

EXCEL,如何比较2个表里的数据差异(使用数据透视表)

目录 1 问题: 需要比较如下2个表的内容差异 1.1 原始数据喝问题 1.2 提前总结 2 使用EXCEL公式方法 2.1 新增辅助列&#xff1a; 辅助index 2.2 具体公式 配合条件格式 使用 3 数据透视表方法 3.1 新增辅助列&#xff1a; 辅助index 3.2 需要先打开 数据透视表向导 …

基于CNN卷积神经网络的调制信号识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 1. 卷积神经网络&#xff08;CNN&#xff09; 2. 调制信号识别 3.实现过程 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 % 构建调制类型…

支付宝短视频平台创作分成激励项目

没想到支付宝也开通了中视频计划&#xff0c;这波羊毛算是蒿定了&#xff0c;最近啊&#xff0c;马爸爸火速上线了支付宝创作分成计划&#xff0c;明显就是抄的抖音中视频计划&#xff0c;目前还在内测阶段&#xff0c;补贴的力度非常大&#xff0c;错过的话就只能拍大腿了&…

Prometheus 的应用服务发现及黑河部署等

目录 promtool检查语法 部署Prometheus Server 检查语法是否规范 部署node-exporter 部署Consul 直接请求API进行服务注册 使用register命令注册服务&#xff08;建议使用&#xff09; 单个和多个注册&#xff0c;多个后面多加了s 在Prometheus上做consul的服务发现 部署…

windows安装linux

https://www.cnblogs.com/liuqingzheng/p/16271895.html 咱们安装linux系统是centos7 准备工作&#xff1a; 安装软件&#xff1a;vmware -------虚拟机 官网下载地址&#xff1a;下载 VMware Workstation Pro | CN 也可以从这里面下载 链接&#xff1a;https://pan.bai…

MySQL优化(面试)

文章目录 通信优化查询缓存语法解析及查询优化器查询优化器的策略 性能优化建议数据类型优化索引优化 优化关联查询优化limit分页对于varchar end mysql查询过程: 客户端向MySQL服务器发送一条查询请求服务器首先检查查询缓存&#xff0c;如果命中缓存&#xff0c;则立刻返回存…

行车遥控接线图

这个一般只有电工才会用。 主要是 【共线和总电】让人疑惑。 这图实际就是PLC的梯形图。 共电&#xff1a;接主电源。【它串联10A保险丝&#xff0c;再到继电器】 总电&#xff1a;它是所有继电器的公共端。【共电的继电器吸合&#xff0c;共电和总电就直通了。】共电的继电器…

Io进、线程——进程的基础

进程的基础 进程是计算机中最基本的执行单位&#xff0c;是程序在操作系统中的一次执行过程。每个进程都有自己的地址空间、数据栈、程序计数器等&#xff0c;相互之间独立运行&#xff0c;互不干扰。进程间的通信通过特定的机制来实现&#xff0c;进程的创建和撤销由操作系统…

详解Mybatis之动态sql问题

编译软件&#xff1a;IntelliJ IDEA 2019.2.4 x64 操作系统&#xff1a;win10 x64 位 家庭版 Maven版本&#xff1a;apache-maven-3.6.3 Mybatis版本&#xff1a;3.5.6 文章目录 一. 在sql映射文件中如何写注释&#xff1f;二. 什么是动态sql&#xff1f;三. 动态sql常用标签有…