我的故事你说,我的文字我落,我值几两你定,我去何方我挑。
经常说Java面向对象是有三大特征:封装、继承、多态。继承还有一个扩展的功能,我们一般称之为抽象性,抽象中有三个核心知识点:抽象类、抽象方法、接口。
抽象的概念其实很简单,在继承当中,如果父类非常的抽象,抽象到没有一个具体实例可以去表示这个类,这个类一般称之为抽象类。
抽象类指的就是不能构建对象的类,前提是继承,抽象类存在的唯一的意义就是让子类去继承类中声明的方法的,而它本身不能创建对象调用使用。
抽象方法只能声明在抽象类当中,父类中有一个方法,方法对于任何一个子类都不满意,每一个继承它的子类都要把这个方法给重写了。那么也就意味着父类中定义的方法的方法体没有任何的意义。这种情况下,父类中的这个方法存在的唯一的意义是定义我的子类都具备这个能力,但是能力到底如何完成,需要每一个子类给重写了,要求它的所有子类必须把这个方法给重写了,同时父类不会给方法提供任何的方法体,只提供方法的名称和参数,这样的方法称之为抽象方法。
访问控制修饰符 abstract class ClassName{类的组成成分 、抽象方法}
**【注意】**抽象类不能有对象实例,但是抽象类有构造器,它的构造器我们无法使用的,是专门给子类使用调用父类的属性和方法的。
语法:访问控制修饰符(不能是private) abstract 返回值类型 方法名(形参列表);
抽象类的抽象方法对于该类的非抽象子类而言,可以重写也可以不重写,一旦重写了,那么这个子类的子类就可以不用重写了。
Java的继承是单继承,一个类只能有一个直接父类,如果要实现多个父类,那么只能去多重继承。
为了弥补Java单继承的缺点,结合抽象类和抽象方法,诞生出了一个全新的Java能力,叫做接口-interface,接口和继承不一样的地方在于,接口可以多实现。
接口和继承还是有所区别的,区别在于继承一般是一种is a的关系,接口一般是一个has a的关系。
接口虽然弥补了继承的局限性,但是接口重点强调子类具备的某种能力。–接口重点在于去把子类共同的能力抽取到接口中。
访问控制修饰符 interface 接口名{
四部分:
JDK8.0版本以前只有两部分:
(1)静态常量属性
(2)抽象方法
JDK8.0版本以后增加了两部分:
(3)静态方法
(4)默认方法
}
**【注意】:**抽象方法可以声明到抽象类,也可以声明到接口中。抽象类是一个类,组成成分就是不一样的,抽象类和接口都不能构建对象,但是抽象类有构造器,接口没有构造器。
子类还是一个接口,如果接口的子类是一个接口的话,那么是继承的关系interface A extends B
子类就是一个普通的Java类,实现的关系class C implements B,D,F....()
一个类能不能继承一个父类之后再去实现接口,完全可以,语法是有要求的
class A extends B implements C,D,...{}
匿名内部类的使用:
new 类名/接口名(){
}
Object类是Java中所有类、接口、数组的顶尖父类,如果一个类、接口、数组没有声明它的父类,那么他们都会默认继承自Object。
java.lang包的Object类把Java中所有类都应该具备的方法全部抽取到Object类当中。
函数名 | 说明 |
---|---|
ctrl+shift+t | 快速查找Eclipse中Java类库或者是我们自己编写的某一个Java类的。 |
ctrl+o | 快速查看当前类中属性、方法、构造器、内部类等内容 |
函数名 | 说明 |
---|---|
getClass() | Class类型获取当前对象的运行时类型的 |
toString() | String Java对象在调用System.out.println(对象名),输出Java中的某个对象,输出时,对象会默认调用toString方法,方法调用成功之后会把返回值给输出了。object类默认提供的toString方法会返回Java对象在堆区的地址。 |
equals(Objecto) | boolean就是Java给提供的专门用来比较两个引用数据类型的值相等判断的方法,一般情况下,引用数据类型的值相等就是属性的相等。 |
重写equals方法的原因是因为Object类型提供的equals方法是比较两个对象的地址相等,而非属性相等。