[Java][extends的使用]

目录

  • 一个例子说明extends的使用场景
      • 问题
      • 不当的做法:
      • 较好的做法:

一个例子说明extends的使用场景

问题

需求:你现在制作了这样一款手机,有一个功能为来电显示,可以显示来电人的姓名

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方法。

你可能感兴趣的:(Java)