Episode-7 父类与子类
接下来,我们将继续学习新的内容:父类与子类。
本期学习所需的前置知识
- 了解继承的概念
- 知道为什么要引入继承这一概念
- 了解子类如何使用父类的构造方法
从我们熟悉的Javabean开始
在前面的学习中,我们多次提到Javabean的存在,顾名思义,Javabean就好像是Java的种子,由一个Javabean可以诞生出许许多多令人意想不到的事物。
在这一篇文章中,它将作为接下来大部分类的父类,展现新的风采。
让我们看看这个“老朋友”:
package item;
public class Item{
private String name;
private int price;
public Item(String name, int price){
this.name = name;
this.price = price;
}
public Item(){
}
public String getName(){
return name;
}
public int getPrice(){
return price;
}
public void setName(String name){
this.name = name;
}
public void setPrice(int price){
this.price = price;
}
}
实际上,Item的属性太少了,一个商品不仅仅有商品名和价格,还有种类,颜色,尺寸等多种属性。
但我们直接在Item里加属性的话,会显得十分杂乱。
于是,我们有必要在Item类的基础上,定义一个子类,在子类中添加更多属性。
子类-苹果
苹果也分多种种类,如红富士、嘎拉、桑萨、红玉、蛇果、金冠、国光、乔纳金、青苹等。
所以,我们可以专门设置一个关于种类的变量,等待用户输入:
package item;
public class Apple extends Item {
private String name;
private int price;
private String type;
public Apple() {
}
public Apple(String name, int price, String type) {
super(name, price);
this.type = type;
}
public String getType() {
return this.type;
}
public void setType(String type) {
this.type = type;
}
}
在上面的代码中,super()
表示引用父类的构造方法,在这里,我们传入了“name”和“price”的值,在执行的时候会自动识别父类中对应的构造方法。接着,我们又加入了新定义的属性“type”。
现在,我们可以写一个简单的程序来尝试一下新定义的子类。
import item.Apple;
public class Client{
public static void main(String[] args){
Apple app = new Apple("开门红", 10, "红富士");
System.out.println("商品名:" + app.getName());
System.out.println("商品价格:" + app.getPrice());
System.out.println("苹果的类别:" + app.getType());
}
}
运行这个程序,可以得到如下结果:
可以发现,在Apple类本身中,虽然我们并没有定义getName()
方法和getPrice
方法,但我们通过使用extends
关键字使得Apple类继承了其父类Item的方法,所以我们才可以直接在子类中调用这些方法。
更多子类-香蕉、西瓜等等
有了前面的经验,现在我们可以定义更多的子类了。通过使用继承,可以提高我们代码的复用性。
其实继承还有一些作用,我们下次再逐一进行分析。
这是一个香蕉类,同样继承了Item类,是Item类的子类:
package item;
public class Banana extends Item {
private String name;
private int price;
private String color;
public Banana() {
}
public Banana(String name, int price, String color) {
super(name, price);
this.color = color;
}
public String getColor() {
return this.color;
}
public void setColor(String color) {
this.color = color;
}
}
再比如说,这是一个西瓜类,它同样是Item类的子类:
package item;
public class Watermelon extends Item {
private String name;
private int price;
private String size;
public Watermelon() {
}
public Watermelon(String name, int price, String size) {
super(name, price);
this.size = size;
}
public String getSize() {
return this.size;
}
public void setSize(String size) {
this.size = size;
}
}
在上面的代码中,我们定义了一个香蕉类和西瓜类,而香蕉类里有一个新的变量,颜色(color);西瓜类里也有一个新的变量,尺寸(size),对应的也添加了新的访问器方法和修改器方法。大家可以在Client.java里添加对香蕉和西瓜的引用,通过实践来感知父类与子类继承的关系。
本节的内容是为之后更深入的讲解打基础,请大家一定要好好理解父类与子类的继承关系。