|
在了解继承的具体实现之前,请首先确保你已经对“理解面向对象”节中的基本概念有所了解。继承中有4个子概念首先需要知道的:父类,子类,重写,扩展。先简单介绍一下这几个概念:
1) 父类:用来被子类继承的称作父类,比如在此我们把“门”定义成一个父类
2) 子类:继承父类的类称作子类,在引我们可以把“防盗门”定义成一个子类
3) 重写:父类“门”有一个方法叫做openDoor(),而由于“防盗门”打开的方式不一样,我们需要在子类中重新实现openDoor()这个方法,此时子类中的openDoor()便重写了父类中的openDoor()。
4) 扩展:父类“门”只有openDoor()和closeDoor()两个方法,而对于“防盗门”这个子类,还存在一个方法叫做“按门铃”,此时子类“防盗门”便可以新增一个方法pressBell(),这就是“扩展”。
与上节一样,我们仍然使用Door这个类来作为父类,里面不做任何修改,代码如下:
package com.agilejoy.rft; // 包, 表明Door.java位于目录com/agilejoy/rft下
public class Door {
private int height; // 定义属性height为私有变量类型, 仅在Door类中可调用
public int width; // 定义属性width为公用变量类型, 可在Door的实例中调用
// 定义方法openDoor
public void openDoor() {
System.out.println("Door is open now ...");
}
// 定义方法closeDoor
public void closeDoor() {
System.out.println("Door is close now ...");
}
// 经典的setter和getter方法
public void setHeight(int height) {
// 本处的this.height为类的私有变量height, 等号后的height为参数height的值
this.height = height;
}
public int getHeight() {
// getter方法, 用于返回值
return this.height;
}
}
接着我们创建一个子类叫SafeDoor,里面什么都不做,只做一下继承,代码如下(注意关键字extends)
package com.agilejoy.rft;
public class SafeDoor extends Door{
// 此类不做任何实现,只继承自Door
}
在这种情况下,实例化SafeDoor这个类,此类将会拥有所有Door类中的作用域为public和protected的方法和属性(特别注意一下private修饰的方法和属性将不能被继承),现在我们实例化SafeDoor并调用相应的方法:
package com.agilejoy.rft;
public class MyDoor {
public static void main(String[] args) {
SafeDoor safeDoor = new SafeDoor();
safeDoor.openDoor();
safeDoor.closeDoor();
safeDoor.setHeight(1000);
System.out.println("Height is: " + safeDoor.getHeight());
safeDoor.width = 500;
System.out.println("Width is: " + safeDoor.width); }
}
运行,输出结果为:
Door is open now ...
Door is close now ...
Height is: 1000
Width is: 500
我们可以看到,虽然SafeDoor类中什么也没有,但是所有Door类中的方法和属性均可用于SafeDoor这个类的实例,这便是继承的强大之外,这是面向对象中很强大的一个功能,通过这样的方式我们便可很容易地实现重用。
最后,我们为SafeDoor这个类添加一个新的方法扩展其功能,方法名为pressBell():
public void pressBell() {
System.out.println("Door's bell is pressed ...");
}
这个新的方法便是一个扩展,这样SafeDoor不仅可以使用Door的方法,也可以扩展自己的方法和属性,使面向对象这种程序设计思想轻易实现重用性和扩展性。
(声明:本文版权归作者个人所有,如需转载,请注明出处,如有需要,请联系QQ: 15903523 (强子)) |
|