需求:你现在制作了这样一款手机,有一个功能为来电显示,可以显示来电人的姓名
class ExtendsDemo {
public static void main(String[] args) {
Phone p = new Phone();
p.show();
}
}
class Phone{
public void show(){
System.out.println("name");
}
}
现在手机的显示功能要升级了,不仅可以显示来电人的姓名还可以显示他的号码与他的照片,你要怎么做?
这好办啊,直接在原来的show功能中填写新的代码就好了啊
class ExtendsDemo {
public static void main(String[] args) {
Phone p = new Phone();
p.show();
}
}
class Phone{
public void show(){
System.out.println("num");
System.out.println("pic");
System.out.println("name");
}
}
这是直接在原来已经可以正确运行的代码上进行修改,在实际的开发过程中,这样的修改不会像这个例子一样只有两条语句,也可能不会只在一处进行修改。一旦运行错误,那么我们就要在很多的代码中进行修改,就会增加许多的时间成本。若是使用extends继承的话:
1.就不会干扰原来正常程序的运行,便于程序功能的扩展。
2.程序明显地有分块,出现错误修改时查看的代码量相对较少,便于程序的维护。
我们定义一个新的类来继承原来的类,由于新增的功能也是来电显示功能,而且是在父类显示功能的基础上增加了一些功能,相当于原功能方法的升级,所以没必要再新加一个功能,直接在子类中改写show方法就可以了
class ExtendsDemo {
public static void main(String[] args) {
NewPhone p = new NewPhone();
p.show();
}
}
class Phone{
public void show(){
System.out.println("name");
}
}
class NewPhone extends Phone{
public void show(){
System.out.println("num");
System.out.println("pic");
super.show();
}
}
其中,在子类的show方法中,我们没必要把父类的show方法代码直接copy过来,因为在实际开发过程中,父类show方法的代码可能是非常多的,直接copy的话代码会显得冗长,阅读性差,而且完全没必要这么做。我们直接在子类show方法中调用父类的show方法就好了,但是子类中也有show方法,直接写的话,JVM会优先在本类(本例中即子类)查找show方法,所以我们要加上super来告诉JVM我们要调用的是父类中的show方法。