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

java 面向对象 day3

这里写目录标题

  • 1、 内部类
    • 1.1 成员内部类 静态内部类
    • 1.2 局部内部类
    • 1.3 匿名内部类[重点]
  • 2、枚举
    • 2.1 使用枚举类 设计单例模式
    • 2.2 小实例
  • 3、泛型
    • 3.1 认识泛型
    • 3.2 泛型类
    • 3.3 泛型接口
    • 3.4 泛型方法
    • 3.5 注意事项

1、 内部类

内部类 就是定义在一个类中的类

1.1 成员内部类 静态内部类

在这里插入图片描述

注意:成员内部类需要先new出外部类才可以实例化内部类,但是静态内部类不需要new外部类。
成员内部类 可以正常访问外部类的各种变量和方法,但是静态内部类只能访问外部类的静态变量和静态方法。

package com.cky.inner;public class iteminner {public static String name="cui";public int age=18;public int money=18;//public class inner {public int age = 20;public inner() {}public void test() {int age = 21;//可以正常访问 外部类的实例变量和静态变量System.out.println(age); //访问局部变量System.out.println(this.age); //访问inner对象的age对象System.out.println(iteminner.this.age); //访问外部对象的age对象System.out.println(name);}}//静态内部类public static class inner1{public void test1(){//System.out.println(money);  错误 静态内部类 不能访问外部类的实例变量System.out.println(name);//正确 可以访问静态变量}}
}
package com.cky.inner;public class Test {public static void main(String[] args) {//inner类属于外部类的一个类 所以需要先new出外部类对象才可以iteminner.inner inner = new iteminner().new inner();iteminner.inner1 inner1 = new iteminner.inner1();//由于是静态内部类 可以不用new 外部对象}
}

1.2 局部内部类

了解即可,局部内部类,就是定义在方法中的一个类。
在这里插入图片描述

1.3 匿名内部类[重点]

有些对象,我们并不必要为其专门建立一个类,只需要在用时为其传递即可。
匿名内部类 最主要的运用场景就是 我们可以将其作为参数 传递给函数。

new时: //第一步为其创建一个子类,第二步是为其返回一个子类对象

package com.cky.inner;public class Test {public static void main(String[] args) {//第一步为其创建一个子类,第二步是为其返回一个子类对象Animal cat=new Animal(){@Overridepublic void cry() {System.out.println("猫在哭");}};
//       test(cat);//等同于test(new Animal(){@Overridepublic void cry() {System.out.println("猫在哭");}});   //new 就会创建出一个animal的对象test(new Animal(){@Overridepublic void cry() {System.out.println("狗在哭");}});}public static void test(Animal animal){animal.cry();}
}interface Animal {public void cry();
}

结果:
猫在哭
狗在哭

2、枚举

枚举是一种特殊类,枚举的构造器是私有的,不能用于创建实例。
使用枚举类,我们可以限制类的实例对象个数。
写法:
修饰符 enmu 枚举类名称{
名称1,名称2…
其他成员
}

例如:

public enum Day {MONDAY,TUESDAY,WEDNESDAY,// 其他枚举常量...
}
在加载Day类时,MONDAYTUESDAYWEDNESDAY等枚举常量就会被创建为Day类的实例。因此,你可以直接通过Day.MONDAY来访问这个实例,而不需要使用new关键字显式创建对象。

2.1 使用枚举类 设计单例模式

public enum Day {MONDAY;
}

这样就设计出来了单例模式,Day不能创建实例,只能有MONDAY一个对象。

2.2 小实例

package com.cky.list;import com.cky.static_demo.A;public class test {public static void main(String[] args) {showdifferent(Sex.GIRL);showdifferent(Sex.BOY);
//   showdifferent(1);  错误 我们使用了枚举类型 只能传递给其枚举对象 ,通过这样 我们可以限制传入的对象}public static void showdifferent(Sex sex){switch (sex){case BOY:System.out.println("男");case GIRL:System.out.println("女");}}
}
enum Sex {//第一行就是枚举类可能的对象,其实就是A 是个枚举类 它可能的对象有X,Y,Z三种,//枚举类的 构造方法是私有的 不可能去实例化它BOY,GIRL;
}

3、泛型

3.1 认识泛型

例如:ArrayList 就是一个泛型类

package com.cky.fx;import java.util.ArrayList;public class Test {public static void main(String[] args) {ArrayList a=new ArrayList(); //此时没有定义泛型类型,就可以add任意类型a.add(1);a.add("java");ArrayList<String> a1=new ArrayList<>();
//        a1.add(1); 错误 只能添加string类型a1.add("string");ArrayList<Cat> cats=new ArrayList<>();cats.add(new Cat());cats.add(new Cat());run(cats);ArrayList<Dog> dogs=new ArrayList<>();dogs.add(new Dog());dogs.add(new Dog());run(dogs);ArrayList<Animal> animals=new ArrayList<>();animals.add(new Animal());run(animals);}//自己定义泛型方法//比如动物 我们想让所有的动物都参加比赛  此时我们的要求是传入的必须是动物 而不能是其他 我们让T extens Anmial就可以了
//    public static <T extends Animal>void run(ArrayList<T> t){
//
//    }//这样写 是错误的 虽然 Dog和Cat是 Animal的子类 但是添加上 ArrayList就不同了 只能传入 Animal这一个
//    public static void run(ArrayList<Animal> t){
//    }//? 号是通配符 在我们使用泛型时可以使用
//    extends 表示上限 即任何属于Animal的子类包括其本身均可 但是super表示下限 只有Animal和其父类才可以public static void run(ArrayList<? extends Animal> t){}}//自己定义泛型类class Myarr<T>{public  void add(T t){return;}
}class Animal{void run() {}
}
class Cat extends Animal{}
class Dog extends Animal{}

3.2 泛型类

3.3 泛型接口

3.4 泛型方法

3.5 注意事项

在这里插入图片描述

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

相关文章:

  • Flink 大数据 学习详情
  • [项目设计] 从零实现的高并发内存池(四)
  • 02.URL的基本知识和使用
  • 人工智能指数报告2023
  • Android如何对应用进行系统签名
  • 【系统安全加固】Centos 设置禁用密码并打开密钥登录
  • 关于我在项目中封装的一些自定义指令
  • react经验11:访问循环渲染的子组件内容
  • Java开发工程师面试题(业务功能)
  • BUUCTF-Misc-百里挑一
  • 【力扣刷题练习】42. 接雨水
  • 鸿蒙实战开发:数据交互【RPC连接】
  • QLC SSD:LDPC纠错算法的优化方案
  • 【Flutter 面试题】main()和runApp()函数在Flutter的作用分别是什么?有什么关系吗?
  • ChatGPT高效提问——说明提示技巧
  • 从零学算法41
  • FPGA高端项目:FPGA基于GS2971的SDI视频接收+OSD动态字符叠加,提供1套工程源码和技术支持
  • UML-类图详解
  • Python 快速获取PDF文件的页数
  • uniapp开发小程序使用x-www-form-urlencoded; charset=UTF-8 编码格式请求案例
  • 酷开科技服务升级,酷开系统给消费者更好的使用体验!
  • 【leetcode热题】单词拆分
  • 【论文阅读】MC:用于语义图像分割的深度卷积网络弱监督和半监督学习
  • 读书·基于RISC-V和FPGA的嵌入式系统设计·第3章
  • 本地项目推送到腾讯云轻量应用服务器教程(并实现本地推送远程自动更新)
  • MacOS安装反编译工具JD-GUI 版本需要1.8+
  • 计算机大数据毕业设计-基于Flask的旅游推荐可视化系统的设计与实现
  • java实现pdf转word
  • 【操作系统概念】 第4章:线程
  • STM32/GD32——I2C通信协议