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

3.29~3.30学习总结

刷题情况:

蓝桥杯刷题:

Java学习情况:

抽象类:如果将子类中抽取的共性行为(方法),子类的执行不一样的时候

(通俗一点来说,就是无法找到一个万能的方法体供子类使用,但这个行为是一样(例如:狗吃骨头,羊吃艹,这个行为是一致的,但父类的方法体不能够万能的描述这俩个动物的吃的行为,也就是确定不了方法体)将这个方法定义为抽象方法。

当一个类中存在了抽象方法的时候,那这个类一定是抽象类,用abstract修饰。

但是抽象类中允许存在普通方法。总结一下就是:存在抽象方法一定是抽象类,抽象类不一定有抽象方法。

抽象类不允许创建实例,也就是不允许创建对象。

抽象类的子类:要么重写抽象类的所有方法,要么这个类继续为抽象类。

抽象类中允许存在抽象方法。

接口和抽象类的区别:

意义上的不同:

接口体现的是一种规范,类似于整个系统的总纲。

抽象类体现的是一种模板式设计,抽象类可以被当作系统实现产品的中间产品,可以参与完成多个不同的最终产品。

语法上的不同

接口里面只允许存在抽象方法,静态方法和默认方法(default),不能为普通方法提供方法实现,

而抽象类中可以存在普通方法。

接口里面只能定义静态常量(public static final)

而抽象类可以有普通成员变量,也可以有静态常量。

接口没有构造方法。

抽象类有构造方法。

接口不能包含初始化块。

抽象类可以包含初始化块。

内部类:简单来说就是在一个类里面的类

成员内部类:一个类中和成员变量处于同一位置的类

非静态内部类:特殊的成员内部类(有static修饰)

静态内部类:特殊的成员内部类(有static修饰)

局部内部类(定义于方法中的类)(用处不大)

匿名内部类(重点):

内部类可以直接访问外部类的成员变量(无论是非私有还是私有)(类比,成员变量可以访问成员变量(无论是私有还是非私有))但是外部类不能直接访问内部类,需要创建内部类的对象才可以访问。

外部类静态成员不能访问非静态的内部类

非静态内部类里不允许定义静态成员(静态方法,静态初始化块,静态变量);

但是静态内部类里面可以有非静态内部类和静态内部类

这里补充static的一个知识,static的作用是把类成员变成和类相关,而不是实例相关,static修饰的成员属于整个类,而不是单个对象,而外部类的上一级程序单元是包,所以不可以使用static修饰,内部类可以使用static修饰,使得内部类变得和外部类相关。

静态内部类不能访问外部类的实例成员,只能访问外部类的静态成员。

匿名内部类:

匿名内部类不能是抽象类,因为匿名内部类在创建的时候就创建了匿名内部类的对象,因此不允许将匿名内部类定义成抽象类(抽象类不能创建实例,只能作为父类去派生子类)

匿名内部类不能定义构造方法,因为匿名内部类没有类名,所以无法定义构造方法,但可以定义初始化块,可以通过实例初始块来完成构造方法需要完成的事情。

最常用的创建匿名内部类的方式是需要创建某个接口类型的对象。

创建匿名内部类的时候,必须实现接口或抽象父类里的所有抽象方法,(如果有需要,也可以重写父类中的普通方法)

枚举类:

package exerse;public enum SeasonEnum {Spring,Summer,Fall,Winter;
}

枚举常量序数从0开始;

枚举类默认继承了java.lang.Enum类,而不是object类,因此枚举类不能显式继承其他父类,

使用enum类定义,非抽象的枚举类会默认使用final修饰,因此枚举类不能派生子类。

枚举类的构造器只能使用private访问控制符,如果省略了构造器(构造方法)的访问控制符,那么默认使用private修饰,如果强制指定访问控制符,那么只能指定private控制符,

!!!注意:枚举类的实例必须在枚举类的第一行显式列出,否则这个枚举类永远都不能产生实例。这些实例,系统会自动添加静态常量的修饰符(public static final)。

枚举类默认提供了一个values()方法,该方法可以很方便的遍历所有的枚举值。、

代码演示:

package exerse;public class EnumTest {public void judge(SeasonEnum s){switch (s){case Spring -> System.out.println("春天");case Summer -> System.out.println("夏天");case Fall -> System.out.println("秋天");case Winter -> System.out.println("冬天");}}public static void main(String[] args) {for (SeasonEnum s:SeasonEnum.values() ){System.out.println(s);}EnumTest p=new EnumTest();p.judge(SeasonEnum.Spring);}
}

枚举类和普通的类区别不大,差别在于,创建枚举类对象不能随意创建,创建的实例只能是枚举值。列出枚举值的时候,可以不用显示调用构造器,不用使用new关键字,就可以船舰枚举类对象。

在枚举类中添加私有构造方法,列出枚举值的时候传入参数:好处:更加安全,成员变量都不可随意改变。

枚举类和普通类一样,也可以实现一个或者多个接口,实现接口和普通类一致,

不是所有的枚举类都为final修饰,当枚举类的内部存在抽象方法的时候,这个枚举类就是用abstract所修饰,不是使用final修饰。这个时候存在派生子类。

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

相关文章:

  • 结构体详解 ——— C语言
  • Java SE 基础(4) Java的语言特点
  • 都炸店了,拼多多还在坚持什么
  • vue尚品汇商城项目-day01【6.Footer组件的显示与隐藏】
  • 命令行上的数据科学第二版 一、简介
  • utf-8转换到utf-16的转换过程你懂吗?
  • C++编程大师之路:从入门到精通--持续更新中~
  • 面试阿里软件测试岗,收到offer后我却毫不犹豫拒绝了....
  • 【c语言多线程编程】关于pthread_create()和pthread_join()的多线程详解
  • 抖音seo矩阵系统源码搭建技术+二开开源代码定制部署
  • 【周赛刷题】平衡树+图中最短环
  • C++笔记——第十篇 继承 的解析,详细易懂哦
  • SQL Server中的全文搜索
  • 自适应平移混音方法
  • 炼钢厂VR职业技能实训软件,提高员工学习效率和掌握技能速度
  • MySQL数据库范式
  • 通过多层方法重塑网络安全
  • Golang学习+深入(四)-运算符
  • C++ 运算符重载:C++ 运算符重载的高级技巧和最佳实践
  • 软件测试找了2个月了,找不到工作怎么办?
  • 满足高并发的TB API接口接入说明
  • Themis Pro版将正式推出,3次迭代到底在酝酿什么?
  • 边缘检测和轮廓检测
  • 二分法模板以及例题 (三)
  • 向下转型和向上转型(易理解)
  • 华为OD机试用JS实现 -【机智的外卖员】(2023-Q2 押题)
  • 同态加密:一个基于多方计算的CKKS方案
  • 最小生成数
  • 【模板】树状数组
  • 网站都变成灰色了,怎么实现的?