抽象类
抽象类:一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
1.抽象类使用abstract修饰类
2.抽象类当中,可以包含普通类所包含的成员
3.抽象类和普通类不一样的是,抽象类中可以包含抽象方法
4.抽象方法是abstract修饰的。这个方法没有具体的实现
5.不能实例化抽象类 new
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来实现多个接口
接口中多态的实现
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.根据年龄比较大小
这里就要进行修改,但是风险大,如果这个代码已经跑了一段时间,在实际生活应用中不好更改。
Comparator<>侵入性较弱
用冒泡排序法重新定义比较
Cloneable接口和深拷贝
空接口/标记接口:当前类可以被克隆
protected:不同包中需要用super访问 ,所以此时的当前类当中,必须重新clone方法
一个对象,如果想被克隆:
1.实现Cloneable接口
2.重写clone方法
3.声明异常
浅拷贝:没有拷贝所有内容,只拷贝了部分,当改动拷贝值时,会导致原来的对象值也发生改变。
深拷贝: