我这些学习笔记,记录的都是我自己认为的知识点,可能以后再看的时候还要翻书,但是可以用来定位到准确的书中示例的位置,减少翻书重找的时间,利于自身知识体系的搭建。 self-transcendence
第10章 接口继承多态
-------------------------------------------------------------------------10.1类的继承
继承是面向对象开发思想中的一个非常重要的概念,它使整个程序架构具有一定的弹性,可以减少软件开发周期,提高软件的可维护性和扩展性。
继承是基于某个类的扩展,制定一个新类,新类继承父类原有的方法和属性,还可以增加新的方法和属性,也可以重写父类的方法和属性。
继承的关键字是extends
实例化子类的时候,父类的无参构造方法会被自动调用,但有参构造方法并不能被自动调用,只能依赖于super关键字显式地调用父类的构造方法
如果使用finalize()方法对对象进行清理,需要确保子类的finalize()方法最后一个动作是调用父类的finalize()方法,以保证当垃圾回收对象占用内存时,对象的所有部分都能被正常终止
----------------------------------------------------------------------------
10.2 Object类
在定义类(class)时,在java中所有类都直接或间接的继承了Object类。创建类时如果没有指定他继承的类,那他就继承Object类。
Object类中主要包括clone() finalize() equals() toString()等方法,其中常用的两个方法为equals() toString()
Object类中的getClass() notify() notifyAll() wait()等方法不能被重写,这些方法是final类型。
1. getClass()方法
getClass().getName()
返回对象执行时的class实例,使用此实例调用getName()方法可以取得类的名称
2. toString()方法
在创建类的时候可以重写tostring方法,这样就可以在输出该类的时候输出成想要的字符串
3. equals()方法
自定义类中使用equals方法时,将返回false,因为equals方法默认使用==比较,所以要在自定义类中重写equals方法才能做到真正比较两个对象的内容。
--------------------------------------------------------------------------
10.3 对象类型的转换
例:有子类Parallelogram继承父类Quadrangle
Quadrangle q=new Parallelogram()
将子类对象看作是父类对象被称为“向上转型”。
向上转型是从具体类到抽象类的转换,所以他总是安全的
向下转型是从抽象类到具体类的转换,这样通常会有问题,因此要进行显式类型转换,指明父类对象转换为哪一种类型的子类对象。
-------------------------------------------------------------------------
10.4 使用instanceof操作符判断对象类型
例:有子类Parallelogram继承父类Quadrangle
Quadrangle q=new Parallelogram()
Parallelogram p=new Parallelogram()
If(q instanceof p) 返回true说明q是p的实例,就可以执行向下转型的操作
向下转型要判断父类对象是否是子类对象的实例,使用instanceof操作符;instanceof还可以判断一个类是否实现了某个接口,还可以判断一个实例对象是否属于一个类。
---------------------------------------------------------------------
10.5 方法的重载
方法名相同,参数不同,返回值可以不同
参数可以用int... a来表示int[]a,这种参数叫做不定长参数
---------------------------------------------------------------------
10.6 多态
多态可以使程序具有良好的扩展性,可以对所有类对象进行通用的处理。
多态是同一个行为具有多个不同表现形式或形态的能力
多态就是同一个接口,使用不同的实例而执行不同操作
现实中,比如我们按下 F1 键这个动作:
如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
如果当前在 Word 下弹出的就是 Word 帮助;
在 Windows 下弹出的就是 Windows 帮助和支持。
同一个事件发生在不同的对象上会产生不同的结果。
--------------------------------------------------------------------
10.7 抽象类与接口
一般来说,父类都被定义为抽象类,需要使用这个父类进行继承与多态处理。多态机制中,并不需要把父类初始化对象,只需要子类对象,所以java设置抽象类不能被实例化。
Abstract是定义抽象类的关键字,方法用就是抽象方法。
只要有一个抽象方法,那么该类一定是抽象类,继承了抽象类,就一定要实现抽象类的抽象方法。
--------------------------------------------------------------------
10.8 接口
接口是抽象类的延伸,他是纯粹的抽象类,所有的方法都没有方法体。
接口用implements引用,接口中的方法必须为pulibc或abstract形式,接口中任何字段都默认是static和final。
接口还可以继承别的接口