1.继承

1.子类继承自父类,且只能继承自一个父类,但是一个父类可以被多个子类继承,继承可以减少代码冗余;维护变得简单;扩展变得容易

这很类似于现实生活中的父子,一个孩子只能有一个父亲(亲生的父亲啊,继父虽然也有个继字,但是跟这个继承可没啥关系),但是一个父亲可以有很多孩子。

2.子类继承父类的公有属性和公有方法

子类不能继承父类私有属性和私有方法。这好比一个父亲把自己最好的一面展示给自己的孩子,让孩子去模仿学习继承自己的优良传统,但是对于自己的不良习惯,则不让孩子看到。孩子可以在父类的基础上发展自己的东西,但是无论好坏都不能传给自己的父亲。

3.子类不能继承父类的构造方法

一个类想要获取构造方法,只有两种方法,一个是自己定义属于自己的构造方法,另一个是使用JVM分配的缺省构造方法。但是子类是可以访问父类的构造方法。但是在初始化子类实例时,在调用子类自己的构造之前,会优先调用父类的构造方法,这个调用可以是通过super进行显示调用,也可以使隐式调用。

4.使用final定义的类不能被继承

一心遁入空门,孑然一身了无牵挂的好。

5.数据初始化顺序

父类静态块>子类静态块>父类非静态块>父类构造方法>子类非静态块>子类构造方法。

6.继承实例化

继承实例化
输出结果分别是
3
4
3
There are 3 animals.
There are 4 animals.
There are 4 animals.
通过animalcat访问iAnimal实例变量,输出将是Animal(声明时的类型)对象的iAnimal实例变量的值;通过animalcat访问diaplay方法,输出将是Cat(运行时类型)对象的行为方式。

7.访问子类实例变量
访问子类对象的实例变量
上述程序执行顺序:
创建Cat对象;
执行Animal类iAnimal=3;
执行父类构造方法,this表示正在实例化的类的实例对象,即Cat类的实例对象,调用Cat类的display方法,此时Cat类的iAnimal变量还没有被赋值;
执行Cat类iAnimal=4;
执行Cat构造方法,this表示正在实例化的类的实例对象,即Cat类的实例对象,调用Cat类的display方法。
同时,此时内存中只存在一个Cat对象,只是这个Cat对象不仅保存了自己类所有的实例变量,还保存了它父类所有定义的全部实例变量。

  2.封装

类的封装性即不能让外面的类随意修改一个类的成员变量;

在定义一个类的成员(包括变量和方法),使用private关键字说明这个成员的访问权限,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调用;

为实现封装性,常将类的成员变量声明为private,再通过public的方法来对这个变量进行访问。对一个变量的操作,一般都有 读取和赋值操作,我们一般定义两个方法来实现这两种操作,即:getXxx()与setXxx();

一个类就是一个模块,我们应该让模块仅仅公开必须要让外界知道的内容,而隐藏其他的一切内容。再进行程序设计时,应尽量避免一个模块直接修改或操作另一个模块的数据,模块设计追求强内聚(许多功能尽量在类的内部独立完成,不让外面干预),弱耦合(提供给外部尽量少的方法调用)。

3.多态

指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
多态的作用:消除类型之间的耦合关系。

多态存在的三个必要条件
一、要有继承;
二、要有重写;
三、父类引用指向子类对象。

多态的好处:

1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。
4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。

发表评论

电子邮件地址不会被公开。 必填项已用*标注