在前面的课程中,你多次看到继承被提及.在java语言中,类可以派生于其它的类,包括其它类中的属性和方法.
声明:
继承类叫做子类(也叫做派生类,扩展类).被继承的类叫做超类(也叫做基类,父类).
除了Object没有父类,其它的类都有且只有一个父类(单继承).在定义一个类时若没有父类,则隐含继承Object,每一个类都是Object类的子类.
继承的思想是简单并且强大的:当你想创建一个新类,并且已经存在的类中有你想要的代码,你可以从已经存在的类派生出新类.
一个子类从父类继承所有的成员(members).构造函数不是成员,所以不被继承,但是可以在子类中调用父类构造方法.
Java平台的类继承
在java.lang包中的Object类定义并且实现了所有类的共同行为.在Java平台,大多数类直接派生与Object类,下面是类继承结构.
Object类是通用的,在继承结构的最顶端.靠近底端的类则提供更加具体的行为.
一个继承的例子
public class Bicycle {
//Bicycle类有三个属性
public int cadence;
public int gear;
public int speed;
//Bicycle类有一个构造方法
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
//Bicycle有四个方法
public void setCadence(int newValue) {
cadence = newValue;
}
public void setGear(int newValue) {
gear = newValue;
}
public void applyBrake(int decrement) {
speed -= decrement;
}
public void speedUp(int increment) {
speed += increment;
}
}
声明一个MountainBike类是Bicycle的子类:
public class MountainBike extends Bicycle {
// the MountainBike subclass adds one field
public int seatHeight;
// the MountainBike subclass has one constructor
public MountainBike(int startHeight, int startCadence, int startSpeed, int startGear) {
super(startCadence, startSpeed, startGear);
seatHeight = startHeight;
}
// the MountainBike subclass adds one method
public void setHeight(int newValue) {
seatHeight = newValue;
}
}
MountainBike继承了Bycycle的所有属性和方法,并且增加了一个属性seatHeight和一个方法.除了构造方法,你就想重新写了一个完整的包含4个属性5个方法的类.如果Bycycle类的方法非常复杂并且需要花大量时间调试,那这样做是非常有价值的.
你能在子类里做什么
不管子类在哪个包里,一个子类从父类继承所有的public和protected成员.如果子类跟父类在相同的包(package)中,他也继承具有包权限的成员.你可以使用,覆盖,改写这些成员:
- 继承的属性可以想其他属性一样直接使用.
- 可以声明一个与继承的属性同名的属性来隐藏(hidding)继承的属性(不推荐)
- 可以声明一个父类中没有的属性
- 继承的方法可以直接使用
- 可以写一个新的方法与继承的方法有相同的标签来重写(overriding)它.
- 可以写一个静态(static)方法与继承的方法具有相同的标签来隐藏(hidding)它.
- 你可以声明一个新的方法.
- 可以在子类的构造方法中调用父类的构造方法,隐式或者用关键字super.
下面的部分将扩展这些话题.
父类中的私有成员
子类不会继承父类中的私有成员.然而,如果父类中有public或者protected方法访问了它的私有属性,那些方法仍然是可以使用的.
一个对它的封装类具有全部的访问权限,即使是私有成员.那么一个public或者protected的嵌套类被某个类继承,这个类对封装类的所有成员都具有间接的访问权限.
对象转换
如果我们写
public MountainBike myBike = new MountainBike();
那么myBike是MountainBike类型的.
MountainBike是Bicycle类和Object类的后代.所以,一个MountainBike是一个Bicycle也是一个Object,他可以被用在所有Bicycle或者Object类型的的地方.
反过来就不一定是对的了:一个Bicycle可能是一个MountainBike,也可能不是.转换(Casting)展示了一种类型替代另一种类型的用法,例如:
Object obj = new MountainBike();
obj既是一个Object,也是一个MountainBike.这叫做隐式转换.
另一方面,我们写
MountainBike myBike = obj;
我们将会得到一个编译时错误,因为编译器不知道obj是一个MountainBike.然而,我们可以用现实类型转换告诉编译器我们保证给obj赋值的MountainBike:
MountainBike myBike = (MountainBike)obj;
这种转换将对obj的赋值插入一个运行时检查(runtime check)让编译器能够安全地认为obj是一个MountainBike.如果obj在运行时不是一个MountainBike,将抛出一个异常.
注意:你可以用instanceof操作符测试一个特定对象的类型.可以让你避免因为一个不合适的转换而发生运行时错误.例如:
if (obj instanceof MountainBike) {
MountainBike myBike = (MountainBike)obj;
}
分享到:
相关推荐
JavaSE的继承是面向对象编程的一个核心特性,它允许我们创建一个新的类(子类)来扩展已有的类(父类)的功能。这种机制使得代码复用变得简单,并且能够更好地组织和设计复杂的程序结构。 首先,我们要理解继承的...
JavaSE中的接口是面向对象编程的一个重要概念,它充当了不同类之间的一种契约,定义了一组公共的方法规范,使得不同的类可以通过实现接口来遵循相同的协议。接口是引用数据类型,与类相似,但它们不能实例化,只能被...
本教程"JavaSE基础入门视频教程33天之(10) part1"聚焦于面向对象编程中的一个重要概念——继承。通过这10个视频,初学者将对JavaSE中的面向对象编程有更深入的理解,为成为一名初级程序员打下坚实的基础。 继承是...
#### 一、Java平台概述与JavaSE的地位 - **Java平台三个版本**: - **JavaME(Micro Edition)**:主要用于小型设备、智能卡、移动终端应用。随着智能手机和平板电脑的发展,JavaME的使用率逐渐降低。 - **JavaSE...
以上只是JavaSE部分核心知识点的概述,实际的“javase笔记.7z”文件可能包含更详细的讲解,如设计模式、JVM原理、并发编程进阶等内容。学习JavaSE不仅需要掌握这些基础知识,还要通过实践不断深化理解,才能成为一名...
#### 一、JavaSE概述与特性 JavaSE(Java Standard Edition)作为Java技术的基础部分,提供了构建桌面应用和其他基于标准PC环境应用的能力。它包括了核心Java API,如集合框架、I/O操作、网络功能、线程支持、安全...
#### 一、Java概述与安装配置 - **Java语言的特点**: - 简单性:Java语法简洁明了,易于理解和学习。 - 面向对象:Java是一种纯面向对象编程语言,支持封装、继承、多态等特性。 - 平台无关性:通过JVM(Java...
3. **继承**:学习单一继承和多层继承,理解super关键字的用法。 4. **多态**:掌握抽象类、接口、重写(Override)、重载(Overload)的概念。 5. **构造器**:了解构造函数的作用,掌握构造器的使用和重载。 四、...
#### 一、Java基础概述 - **Java语言特点**:Java是一种面向对象的编程语言,具有简单性、面向对象、健壮性、安全性、平台无关性等特点。 - **JVM与JDK的区别**: - **JVM(Java Virtual Machine)**:是Java程序的...
面向对象编程(OOP)是Java的核心特征之一,主要包括类、对象、继承、封装、多态等概念。 ##### 3.1 类与对象 - **类**:是一组具有相同属性和行为的对象的抽象。 - **对象**:是类的具体实例,每个对象都有自己的...
JavaSE基础学习笔记2020涉及到Java技术的基础部分、Java语言的基础语法、面向对象编程以及JavaSE的核心内容。接下来我将针对各个章节的知识点进行详细说明。 一、Java技术基础 1. 编程语言:程序设计语言经历了从...
继承是面向对象编程的核心特性之一,它允许新类(子类)继承现有类(父类)的特性和行为。 **继承的特点:** - 子类如果实例化,那么父类的构造方法会被先调用。 - 子类可以调用父类的公有方法,但不能调用私有方法...
6. Java学习路线图展示了JavaSE的开发知识体系,包括面向对象编程的概念,如类、继承、多态性、抽象类、接口和内部类。路线图还包括了对Socket编程、多线程编程、对象序列化、程序国际化、异常处理、I/O流式编程、...
本视频教程“JavaSE基础入门视频教程33天之(15)”是针对初学者设计的,旨在帮助那些没有编程基础的人快速掌握Java编程技能,并在学精后能够获得较高的薪资水平,如10K以上。 在这个阶段,主要讲解的是Java中对象...
本教程“JavaSE基础入门视频教程33天之(21) part3”显然是针对初学者设计的,旨在帮助完全没有编程基础的人快速掌握Java基础知识,并通过学习提升技能,达到10K以上的薪资水平。 在Java编程中,异常处理是一项...
本教程是针对JavaSE基础入门的33天学习计划的一部分,第11天的内容主要聚焦在面向对象编程的核心概念上,旨在帮助初学者构建坚实的Java编程基础,为未来的高薪就业打下坚实根基。 首先,"day11_11(面向对象)接口和...
以上只是张龙老师JavaSE课堂笔记的部分内容概述,实际笔记中还会涉及更多的细节和实例,旨在帮助学习者全面掌握JavaSE的核心知识,为后续的JavaEE和Android开发打下坚实基础。通过系统学习和实践,读者能够熟练运用...
【Java基础知识概述】 Java是由Sun公司的James Gosling等人在1991年开发的语言,最初命名为Oak,后来在1994年更名为Java。Java分为三个技术架构:JAVAEE(Java Platform Enterprise Edition)用于开发企业级Web应用...