该部分用以记录在学习过程中的一些疑惑以及解答。本文主要涉及了我接触Java后的一些疑惑以及我的一些理解。
一、接口有什么用?
根据之前学过的部分C++知识,我知道在C++中,一个类是可以有多个父类的。而在Java中,一个类只能继承一个父类。这种关系可以理解为Java的类“只能有一个父亲”。
只能继承一个父类是很麻烦的,这往往会增加很多重复性的代码。所以在我的理解中,接口的存在就是帮助一个类“继承多个父类”的。但是接口与类是不同的。接口是抽象方法的集合,所有继承这一接口的类都要实现接口中的抽象方法。当然,在Java8后,接口中也可以使用非抽象的方法。
最初我是不理解这样的设计的。相较于C++,Java的这种要求使得每个继承某一接口的类都要实现所有的抽象方法。这也就意味着,(在Java8之前的版本,)这样的操作就会让我在多个类中重新写多遍一摸一样的代码,显然是效率低下的。
但后来在网络上查找相应信息后,我理解的接口的用意。首先,接口的存在相当于给开发过程定义了某一规范,整个开发过程中,只需要符合这一规范即可,这也使得实际开发中可以做到分工协作。比如如果我的工作里要使用一个转字符串的方法,我就只需要保证输入满足条件即可,具体的实现则是其他人的工作。其次,接口的存在使得程序有了更强的扩展性。使用一个通俗的例子来说,比如要求打印一个新的类型的信息,不使用接口则要写很多很多的实现方法,而使用接口就可以免去这个操作。
二、重写(override)与重载(overload)
区分重写与重载的定义。
重写:
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
重载:
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。最常用的地方就是构造器的重载。
我的理解为:重写就是“我可以不用我之前从父类继承来的某种方法,而是选择使用经我修改过的方法”(当然继承来的老方法也可以用,这时需要使用super关键字);重载就是“对于我可以实现的某种方法,我可以根据参数的不同进行不同的处理,这样就能处理多种情况了”。