JavaSE--继承、抽象类及接口

来源:互联网 发布:js 控制div移动 编辑:程序博客网 时间:2024/05/22 05:24

1. 继承(extends)

如果多个类之间有多个相同的功能,可以将这些功能提取到一个类中,这个类为父类,其他类继承父类基本的功能。继承提高了代码的复用性,同时让类与类产生了关系,给面向对象的另一个特征"多态"提供了前提。

Java中允许单继承,不直接支持多继承,而多继承是以接口多实现的方式来完成。单继承指一个子类只有一个父类,多继承指一个子类可以有多个父类,多继承的弊端在于多个父类之间有相同功能时,导致子类的继承会引起不确定性,所以Java中不直接支持多继承。Java中支持多重继承,这样就形成了继承体系,对于多重继承体系关注的重点是了解顶层的功能,创建底层子类对象来实现功能。

1.1 继承中的成员变量

对象在堆中的创建过程:


如果在子类和父类定义了相同的成员变量,该成员变量同时存在于子类对象的堆空间中,可以通过super来访问同名的父类成员变量,结合对象的创建过程,有如下的代码进行说明。


1.2 继承中的函数重写

子类可以对父类的某一功能进行扩展,在父类原有的基础上添加属于自己的功能内容,具体为:子类函数里可以使用super引用父类的同名函数,并添加自己的内容。

子类函数重写需要注意:1.函数的返回类型、函数名、参数列表要一样;2.子类函数的权限要大于等于父类函数的权限;3.若父类函数为静态子类函数也为静态;

1.3 final 关键字

final关键字的使用是为了使其修饰的成员不被修改,final关键字可以修饰类,方法,变量(成员变量,局部变量,静态变量)。

当父类的某一方法不想被子类重写时,可以对该方法进行final修饰,但子类依旧可以使用父类的该方法。当使用final修改某类时,其他类无法继承于该类。final修饰的变量是一个常量,只能被赋值一次,这样可以提高常量的阅读性,该final修饰的常量名都为大写且使用"_"进行名词的连接。

2.抽象类(abstract)

当父类的某一方法不具体时,可以将该方法定义为抽象方法,而该父类就为抽象类,抽象类的抽象方法必须由子类来具体化。

注意:1.子类必须覆盖父类所有的抽象方法才能实例化;2.抽象类一定是父类,抽象类不能创建对象;3.抽象类可以有构造函数,来给子类对象进行初始化;4.抽象关键字abstract不可以和这些关键字共存:fina、priva、static;

3.接口(interface)

当抽象类的所有方法都为抽象方法时,可以把该抽象类定义为接口。即接口不能创建对象,因为其本质是抽象类;子类必须覆盖接口中所有的抽象方法,否则子类是一个抽象类。

使用“public static final 数据类型 变量名"来定义接口中的变量,使用“public abstract 返回值 方法名”来定义接口中的方法,但语句前边的修饰符是不必要的,Java编译时会自动添加。

接口在Java的重要体现是:实现了子类的多继承。如果子类多继承拥有相同名称方法的父类时,子类对象调用父类方法时会引起不确定性,而接口定义的方法都是不具体的抽象类,子类要将这些抽象方法具体化,即将相同方法名的抽象方法进行一次的重写,避免了子类对象调用的不确定性。

子类通过多实现于接口来完成多继承的功能,子类继承于父类拥有了父类的基本功能,而通过接口来扩展其他的功能。类与类之间是继承关系,类与接口是实现关系,接口与接口之间是继承关系,接口之间可以多继承。

本系列为传智播客的JavaSE学习笔记及个人想法总结,版权归作者所有,欢迎转载学习,但需在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 

0 0