继承Inheritance
Java中继承允许你重用另外一个类的代码, 你可以从现有的类派生 出新类。这个新类叫做 子类
他继承了父类的所有的成员和方法(私有排外).
你可以像使用普通属性一样使用继承的属性. 你也可以定义与父类相同名字的属性名, 它会隐藏父类的属性(不推荐使用). 你可以定义一个新的属性,父类中没有的. 方法也是如此. 你还可以在子类中写一个同名的方法,覆盖父类的方法. 写一个同名的静态方法,隐藏父类的静态方法 .你可以在子类的构造方法中默认或使用关键字super显示的调用父类的构造方法 . 子类不能继承父类私有的成员或方法。
列子
定义一个叫 Shape (形状)的类, Shape是一个基础类,可以被 rectangle(三角形), square(方形), circle(圆形) 继承.
public class Shape {
public double area ()
{
return 0; // Since this is just a generic "Shape" we will assume the area as zero.
// The actual area of a shape must be overridden by a subclass, as we see below.
// You will learn later that there is a way to force a subclass to override a method,
// but for this simple example we will ignore that.
}
}
Circle 继承 类Shape
,Circle
是一个Shape形状.
方法area有在基类中定义 ,同时 area
方法由在 circle
类中定义了属于圆行的特殊计算方法.
class Circle extends Shape { // "extends" 关键字告诉我们这个类继续了Shape类.
private static final double PI = Math.PI; // constant
private double diameter; // This could be any number, representing the diameter of this circle.
public double area () {
double radius = diameter / 2.0;
return PI * radius * radius;
}
}
使用继承的好处是,你可以写一些的类,然后把他们抽象成一个更一般的类的代码。在下面的例子中,我们有一个方法,它比较两个形状面积:
public class Main {
public static void main(String[] args) {
Shape s1 = new Circle (5.0);
Shape s2 = new Rectangle (5.0, 4.0);
Shape larger = getLargerShape(s1,s2);
System.out.println("The area of the larger shape is: "+larger.area());
}
public static Shape getLargerShape(Shape s1, Shape s2) {
if(s1.area() > s2.area())
return s1;
else
return s2;
}
}
方法 getLargerShape()
不需要使用两个特殊类做参数.
只需要使用父类 Shape
作为他们的参数. 你可以传人 Circle
, Rectangle
, Triangle
, Trapezoid
,
等等这些类作为参数去比较面积大小,只要他们继承了Shape类 extend
Shape
说明:文章结合多家网站资料,以及国外教程翻译总结的相关要点,提供的简单自学材料 for my friends。