Java继承示例
这个例子演示了继承在Java编程语言中的用法
什么是继承
继承是允许Java类从其他类派生的OOP能力。父类称为超类,派生类称为子类。子类从它们的超类继承字段和方法。
继承是面向对象编程(OOP)背后的四个主要概念之一。OOP问题在工作面试中非常常见,因此您可能会在下一次Java工作面试中遇到关于继承的问题。
Java中的“所有类的父类”是
Object
类。Java中的每个类都继承自
Object
。在高层
Object
是所有程序中最普遍的。接近层次结构底部的类提供了更专门的行为。
Java平台中的所有类都是Object的后代(图片由Oracle提供)
Java有一个单一的继承模型,这意味着每个类只有一个直接超类。
子类继承其父类的所有公共成员和受保护成员,无论子类位于哪个包中。如果子类与其父类在同一个包中,它还继承父类的包私有成员。您可以按原样使用继承的成员、替换它们、隐藏它们或者用新成员补充它们:
继承的字段可以直接使用,就像其他字段一样。
您可以在子类中声明与超类中同名的字段,从而隐藏它(不推荐)。
可以在子类中声明不在超类中的新字段。
继承的方法可以按原样直接使用。
您可以在子类中编写一个新的实例方法,该子类与超类中的实例方法具有相同的签名,从而重写它。
您可以在子类中编写一个新的静态方法,该子类与超类中的方法具有相同的签名,从而隐藏它。
可以在子类中声明不在超类中的新方法。
您可以编写一个子类构造函数来调用超类的构造函数,可以隐式调用,也可以使用关键字调用
super
.
继承是一种强大的技术,它允许您编写干净且可维护的代码。例如,假设您有一个具有多个后继者的超类。在超类中更改几行代码要容易得多,这样做可以更改每个继承器的功能,而不是在每个子类的每一端都这样做。
Java继承示例
在下面的示例中,我们创建了3个类。超类
Point
表示二维空间中具有x和y坐标的点。
package net.theitroad; public class Point { //fields marking X and Y position of the point public int x; public int y; //one constructor public Point(int x, int y) { super(); this.x = x; this.y = y; } //getter and setter methods public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } }
ColoredPoint
是一个子类,它扩展了
Point
并添加一个附加字段
colorName
. 注意这是如何完成的——我们使用关键字【extends】来告诉我们要从哪个类派生
package net.theitroad; public class ColoredPoint extends Point { //new field added to store the color name public String colorName; public ColoredPoint(int x, int y, String colorName) { super(x, y); this.colorName = colorName; } public String getColorName() { return colorName; } public void setColorName(String colorName) { this.colorName = colorName; } }
最后是一个测试继承性的程序。首先我们创建一个新的
Point
类型
ColoredPoint
. 注意【instanceof】关键字的用法。这样我们就可以检查一个对象是否属于某种类型。一旦我们确定了点的类型
ColoredPoint
我们可以使用以下命令显式键入cast:
ColoredPoint coloredPoint = (ColoredPoint)point;
现在我们可以访问新属性colorName
package net.theitroad; public class InheritanceExample { public static void main(String[] args) { Point point = new ColoredPoint(2, 4, "red"); if (point instanceof ColoredPoint) { ColoredPoint coloredPoint = (ColoredPoint)point; System.out.println("the color of the point is: " + coloredPoint.getColorName()); System.out.println("with coordinates x=" + coloredPoint.getX() + " y=" + coloredPoint.getY()); } } }
运行上面的示例将产生以下输出
the color of the point is: red with coordinates x=2 y=4