黑马程序员:java课程要点-继承

来源:互联网 发布:淘宝新手代销 编辑:程序博客网 时间:2024/06/06 10:02

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

对象的特征:封装,继承,多态

1.1. 继承

1.1.1. 概述

1.让类与类之间产生了关系(也是第三个特征--多态的前提)

2.提高了代码复用性

子类可以直接访问父类中内容,私有的不可以直接访问

extends关键字

例子:学生,工人(子类)——>人(父类,超类,基类)

1.1.2. 特点

1.java中只支持单继承

单继承:一个类只能有一个父类,java仅支持单继承

多继承:一个类可以有多个父类

因为多继承的多个父类中有可能包含相同的成员,这就导致了调用的不确定性。java认为多继承有安全隐患。

???C++是怎么处理多继承的不确定性的?

2.java支持多层继承

多层继承就形成了继承体系,在体系中,顶层类中定义了最基本最共性的内容。

想了解该体系的应用,直接看顶层即可

要使用这个体系的基本功能是,需要对象的,创建这个体系最子类创建对象,既可以使用父类中的方法,又可以使用子类特有的方法

简单说:对于学习体系,参阅顶层类描述,创建低层类对象

1.1.3. 什么时候定义继承呢

事物之间必须存在着所属关系。子类is a 父类

1.1.4. 继承中子父类成员的特点

1.成员变量:super

2.成员函数:重写

3.构造函数

子父类中出现成员变量:

通过一个关键字来表示父类的成员变量,这个关键字是super

superthis的用法非常相似

this:代表的是基本对象的一个引用,会指向当前对象。this其实存的是对象的地址

super:指向当前对象的父类,super指向的不是对象,是类存在的方法区。可以使用其 中的内容

子父类中同名属性的情况出现的不多,因为父类中的属性通常都会私有化,而对外提供访问方式,因而父类中一旦定义了属性,子类就没必要再重新定义了

子类对象中,父类中的内容(父类成员变量,包括私有的)都包含于其中,只是有的不能直接访问

1.1.5. 重写

重要(出现频率高)☆☆☆☆☆

函数的特性:重载和覆盖(重写,覆写)

重载在本类中发生

覆盖在子父类的子类中发生override

覆盖就是子类中保留了父类中的功能,但是建立了子类特有的功能内容

使用覆盖的时候注意事项

1.覆盖至发生在一般函数上

2.子类覆盖父类时,覆盖方法的权限必须大于等于被覆盖的方法的权限

3.静态只能覆盖静态——绑定技术跟非静态(动态绑定)不一样。


覆盖的前提是知道其存在!如果父类之中的方法被私有,则子类不知道其存在,覆盖也就不成立

辨别函数的步骤:先函数名,函数名一致的时候,看参数列表,列表不一样,使用时这几个就不冲突

1.1.6. 子父类中构造函数的特点:

子类的构造函数在进行初始化的时候都会默认访问父类中的空参数构造函数

是通过子类构造函数第一行的一条隐式语句完成的——super();

为什么子类对象在初始化时,一定要访问父类中的构造函数呢?

因为子类继承了父类后,存储了父类的属性,必须要先看父类是如何对自己的属性进行初始化的!

如果父类的空参数构造函数不可用,子类的构造函数中必须手动添加super语句来明确指定父类中的构造函数

当然子类构造函数中也可以通过this语句调用本类的构造函数

本类中的其他构造函数肯定会访问父类的构造函数,对子类对象进行初始化

super语句不可以与this语句共存,因为两个都要写在第一行——因为初始化的动作要先完成

这就是子类的实例化过程

1.1.7. Final关键字

继承的弊端:打破了封装性

final:最终

1.final是一个修饰符,可以修饰类,方法,变量

2.final修饰的类不可以被继承

3.final修饰的方法不可以被复写

4.final修饰的变量是一个常量,只能被赋值一次,不可以被改变

public static final double MY_PI=3.14

一旦数据时不变的,一定给这个数据起个名字,增强阅读性

1.2. 抽象类

1.2.1. 抽象类概述

共性内容的抽取,但是不同子类具体实现细节不同。抽象之后可以强制子类复写该功能

1.2.2. 抽象类的特点

1.抽象方法和抽象类都必须用abstract关键字修饰,抽象方法一定要定义在抽象类中

2.抽象类不可以进行实例化。不能创建对象。因为即使创建了对象调用抽象方法也没有意义

3.抽象类必须由自己的子类将所有的抽象方法否覆盖后,其子类可以进行实例化

如果只是部分覆盖,子类还是一个抽象类

1.2.3. 抽象类的细节:

1.抽象类一定是个父类?——是

2.抽象类中有构造方法吗?——有,用于给其子类实例化


抽象类跟一般类有什么异同:

1)相同点:都是用于描述事物的,都会描述事物的属性和行为

2)不同点:抽象类中缺少足够的信息去描述事物

抽象类中可以定义抽象方法,一般类不行

但是抽象类不可以被实例化,一般类可以

3.抽象类中可不可以没有抽象方法?——可以。目的在于:不能让该类建立对象

4.抽象关键字和那些关键字不可以共存?

1)finalfinal要求不能有子类,abstract要求必须有子类

2)private:私有之后,子类不可见,不能复写

3)static:被静态修饰之后,可以类名调用,但是抽象方法的调用就是抽象所 要避免的

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

原创粉丝点击