Java抽象类和接口

抽象类


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

1.抽象类使用abstract修饰类

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

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

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

5.不能实例化抽象类 new

Java抽象类和接口_第1张图片

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

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

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

Java抽象类和接口_第2张图片

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来实现多个接口

Java抽象类和接口_第3张图片

接口中多态的实现

Java抽象类和接口_第4张图片4. 子类重写抽象方法,必须加上public

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

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

实现多个接口

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

Java抽象类和接口_第5张图片

多继承问题

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

Java抽象类和接口_第6张图片

Java抽象类和接口_第7张图片

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

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

接口间的继承

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

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

Java抽象类和接口_第8张图片

 抽象类和接口的区别

Java抽象类和接口_第9张图片

Object类 


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

 Java抽象类和接口_第10张图片

Java抽象类和接口_第11张图片 Java抽象类和接口_第12张图片

1.equals()

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

 Java抽象类和接口_第13张图片

Java抽象类和接口_第14张图片

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

2.hashCode()

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

Java抽象类和接口_第15张图片

Java抽象类和接口_第16张图片

 同样,重写hashCode()

 
  

 运行结果一致

Java抽象类和接口_第17张图片

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

Java抽象类和接口_第18张图片Java抽象类和接口_第19张图片

 Java抽象类和接口_第20张图片

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

Java抽象类和接口_第21张图片

比较 Arrays.toString();

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

Java抽象类和接口_第22张图片

Java抽象类和接口_第23张图片

 ClassCastException:类型转换错误

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

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

1.根据年龄比较大小

Java抽象类和接口_第24张图片

Java抽象类和接口_第25张图片 2.需求更换,按照姓名比较大小

Java抽象类和接口_第26张图片

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

Java抽象类和接口_第27张图片

Java抽象类和接口_第28张图片Comparable <>对类的侵入性侵入性非常强

Comparator<>侵入性较弱

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

Java抽象类和接口_第29张图片

 Java抽象类和接口_第30张图片

Cloneable接口和深拷贝

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

Java抽象类和接口_第31张图片 

 Java抽象类和接口_第32张图片

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

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

1.实现Cloneable接口

2.重写clone方法

3.声明异常

Java抽象类和接口_第33张图片

Java抽象类和接口_第34张图片 浅拷贝

Java抽象类和接口_第35张图片

Java抽象类和接口_第36张图片 Java抽象类和接口_第37张图片

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

深拷贝: 

Java抽象类和接口_第38张图片

 Java抽象类和接口_第39张图片

 

你可能感兴趣的:(java,jvm)