Java抽象类和接口

本文详细介绍了抽象类和接口在Java中的概念、特点与区别,包括它们的使用场景、成员方法、继承规则等。同时,探讨了Object类中的equals()和hashCode()方法的重写,以及如何处理多态实现。此外,还讨论了Java中的浅拷贝与深拷贝,以及实现Cloneable接口进行对象克隆的过程。
摘要由CSDN通过智能技术生成

抽象类


抽象类:一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

1.抽象类使用abstract修饰类

2.抽象类当中,可以包含普通类所包含的成员

3.抽象类和普通类不一样的是,抽象类中可以包含抽象方法

4.抽象方法是abstract修饰的。这个方法没有具体的实现

5.不能实例化抽象类 new

6.抽象类存在的最大意义就是被继承

7.如果一个普通类,继承了一个抽象类,此时必须重写抽象类中的方法 

 8.如果一个抽象类A继承了一个抽象类B,此时A当中不需要重写B中的抽象方法。但是A再被普通类继承,就需要重写方法。

9.抽象方法是不能私有的。抽象方法目的就是为了重写,私有后无法进行重写。

10.static不满足,不能进行重写。final不满足,final和absract矛盾(一个要终止,一个要继承)。

11.抽象类中可以有构造方法。为了方便子类能直接调用,来初始化抽象类中的成员。

抽象类的作用:一般的类也可以重写,但是抽象类的重写,编译器会自动检查错误,相当于多了与检验。很多语法的出现是为了更早的发现错误。

接口


一般的接口:比如电脑的USB接口。属于公共的规范标准,符合标准就可以通用。

Java中的接口:多个类的公共规范,是一种引用数据类型。(行为的标准/规范)

1.使用interface来修饰接口

2.接口中的成员方法不能有具体的实现:

(1)成员方法

1.默认是public abstract的方法;

2.JDK1.8开始,允许有可以实现的方法,但是这个方法只能是由default修饰;

3.可以实现静态方法,但是所以方法都默认是public类型;

(2)成员

1.成员变量默认是public static final修饰的

(3)

1.接口不能被实例化

2.类和接口之间采用implements来实现多个接口

接口中多态的实现

4. 子类重写抽象方法,必须加上public

5.接口中不能有静态代码块和构造方法

6.如果不想实现接口的方法,就把这个类定义为抽象类。但是这个类被其他类继承,那么必须重写。

实现多个接口

1.一个类可以实现多个接口,使用implements,用逗号隔开不同的接口。(可以解决多继承的问题)

多继承问题

Java中不能继承多个类,只能继承多个接口。

 继承是is....a的关系,接口只是表示有同一种特性。

例如:Animal这个类,继承只能是动物,狗,猫......而接口只表示有共同的特点,比如会游泳,会飞......

接口间的继承

1.接口和接口之间用的是继承 extends

2.类和接口之间用的是实现 implements

 抽象类和接口的区别

Object类 


1.Object类是所有类的父类。我们自己写的类,就算没有显示的extends Obiect ,也是默认继承的。

 

 

1.equals()

地址不一样,运行结果是false,如果想得到我们所认为的true,需要重写equals

 

如果写了自定义类型,注意重写equals方法

2.hashCode()

 hashCode()计算的是具体的对象位置,目前先认为它是一个内存地址。

 同样,重写hashCode()

 

 运行结果一致

 实际中可以依靠idea自己修改equals()和hashCode()

 

 设置好后,编译器就可以自己重写

比较 Arrays.toString();

Comparable;自定义的类型,如果要比较大小,那么必须要让这个类具备可以比较的功能,此时可以选择实现接口comparable

 ClassCastException:类型转换错误

直接比较是错误的,要指定根据什么去比较?年龄?姓名? 

自定义的 学生类要具备比较的功能

1.根据年龄比较大小

 2.需求更换,按照姓名比较大小

  这里就要进行修改,但是风险大,如果这个代码已经跑了一段时间,在实际生活应用中不好更改。

Comparable <>对类的侵入性侵入性非常强

Comparator<>侵入性较弱

用冒泡排序法重新定义比较

 

Cloneable接口和深拷贝

空接口/标记接口:当前类可以被克隆

 

 

protected:不同包中需要用super访问 ,所以此时的当前类当中,必须重新clone方法

一个对象,如果想被克隆:

1.实现Cloneable接口

2.重写clone方法

3.声明异常

 浅拷贝

 

浅拷贝:没有拷贝所有内容,只拷贝了部分,当改动拷贝值时,会导致原来的对象值也发生改变。 

深拷贝: 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roylelele

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值