JAVA基础

ぃ、小莉子 提交于 2020-01-25 23:50:40

java重写和重载

重写:

是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改 变。即外壳不变,核心重写!
重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要 实现父类的方法。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一 个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子 类异常

重载:

重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也 可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。 最常用的地方就是构造器的重载。

重写和重载的区别

方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与 子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。 (1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类 型和次序不同,则称为方法的重载(Overloading)。 (2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回 值也一样的方法,就称为重写(Overriding)。 (3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

接口与抽象

抽象类不能被实例化,只有非抽象类的子类可以创建对象,抽象类不一定包含抽象方法,但是有抽象方法的类一定是抽象类,抽象类只是声明,不包含方法体,构造方法和类方法不能声明为抽象类(static 修饰的)抽象类的子类必须给出抽象类的具体实现,除非该类也是抽象类。

JAVA 接口和抽象类的区别 本质:从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一 种行为的规范 区别:
1.接口的方法默认是public,所有方法在接口中不能有实现,抽象类可以有非抽象的方法
2.接口中的实例变量默认是nal类型的,而抽象类中则不一定
3.一个类可以实现多个接口,但最多只能实现一个抽象类
4.一个类实现接口的话要实现接口的所有方法,而抽象类不一定
5.接口不能用new实例化,但可以声明,但是必须引用一个实现该接口的对象

多态

1、多态是同一个行为具有多个不同表现形式或形态的能力。
2、多态就是同一个接口,使用不同的实例而执行不同操作。
3、多态性是对象多种表现形式的体现。 多态的优点:
1.消除类型之间的耦合关系
2.可替换性
3.可扩充性
4.接口性
5.灵活性
6.简化性 多态存在的三个必要条件
1.继承
2.重写
3.父类引用指向子类对象 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如 果有,再去调用子类的同名方法。
多态的实现方式 1、重写 2、接口(工厂模式、责任链) 3、抽象和抽象方法(工厂模式、责任链)

集合

Collection和Map,是集合框架的根接口。
Collection的子接口:
Set:接口 —实现类: HashSet、LinkedHashSet
Set的子接口SortedSet接口—实现类:TreeSet
List:接口—实现类: LinkedList,Vector,ArrayList

List集合:
有序列表,允许存放重复的元素
实现类:
ArrayList:数组实现,查询快,增删慢,轻量级;(线程不安全)
LinkedList:双向链表实现,增删快,查询慢 (线程不安全)
Vector:数组实现,重量级 (线程安全、使用少)
ArrayList 底层是Object数组,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点。(在内存空间是连着的,所以查询速度快)
在LinkedList的底层是一种双向循环链表。在此链表上每一个数据节点都由三部分组 成:前指针(指向前面的节点的位置),数据,后指针(指向后面的节点的位置)。最后 一个节点的后指针指向第一个节点的前指针,形成一个循环。 双向循环链表的查询效率低但是增删效率高。
Vector (与ArrayList相似,区别是Vector是重量级的组件,使用使消耗的资源比较多。) 结论:在考虑并发的情况下用Vector(保证线程的安全)。 在不考虑并发的情况下用ArrayList(不能保证线程的安全)。

set集合
无序的,不允许存放重复的元素,允许使用null
HashSet和TreeSet是Set的实现
HashSet 的后台有一个HashMap;初始化后台容量;只不过生成一个HashSet的话,系统 只提供key的访问; 如果有两个Key重复,那么会覆盖之前的; 实现类 : HashSet:equals返回true,hashCode返回相同的整数;哈希表;存储的数据是无序 的。
LinkedHashSet:此实现与HashSet的不同之外在于,后者维护着一个运行于所有条目的 双重链接列表。存储的数据是有序的。
HashSet类 HashSet类直接实现了Set接口,其底层其实是包装了一个HashMap去实现的。HashSet 采用HashCode算法来存取集合中的元素,因此具有比较好的读取和查找性能。
HashSet的特征:
1、不仅不能保证元素插入的顺序,而且在元素在以后的顺序中也可能变化(这是由 HashSet按HashCode存储对象(元素)决定的,对象变化则可能导致HashCode变化)
2、HashSet是线程非安全的
3、HashSet元素值可以为NULL
HashSet如何判断元素重复呢? HashSet需要同时通过equals和HashCode来判断两个元素是否相等,具体规则是,如果两个元素通过equals为true,并且两个元素的hashCode相等,则这两个元素相等(即重 复)。 所以如果要重写保存在HashSet中的对象的equals方法,也要重写hashCode方法,重写 前后hashCode返回的结果相等(即保证保存在同一个位置)。所有参与计算 hashCode() 返回值的关键属性,都应该用于作为 equals() 比较的标准。

Map

提供了一种键值对的存储方式,键是唯一的,每个键对应一个value
实现类: HashMap、TreeMap、LinkedHashMap、Hashtable等 HashMap: 键值对,key不能重复,但是value可以重复;key的实现就是HashSet; value对应着放;允许null的键或值;
Hashtable: 线程安全的,不允许null的键或值; Properties::key和value都是String类型,用来读配置文件;
TreeMap: 对key排好序的Map; key 就是TreeSet, value对应每个key; key要实现 Comparable接口或TreeMap有自己的构造器;
LinkedHashMap: 此实现与HashMap的不同之处在于,后者维护着一个运行于所有条 目的双重链接列表。存储的数据是有序的。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!