一、JAVA方法:
在Java语言规范中,一个方法的特征仅包括方法的名字,参数的数目和种类,而不包括方法的返回类型,参数的名字以及所抛出来的异常。在Java编译器检查方法的重载时,会根据这些条件判断两个方法是否是重载方法。
重写/覆盖(overriding):必须发生在继承中
1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果,也就是要求返回值、方法名、参数都完全一样。
2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
4、覆盖只对父类中的非私有方法有效。子类方法的访问权限不能小于父类。
5、final修饰的方法不允许被重写
6、protect修饰的方法在包内和包外都可以被覆盖。
7、“方法重写”实现的是运行时多态,也叫动态多态性。
重载(overloading):
1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int));
2、不能通过访问权限、返回类型、抛出的异常这些方式进行重载,也就是这些因素不能构成重载,但是这些元素在重载的方法上是可以不同的。
3、方法的异常类型和数目不会对重载造成影响;
4、重载也可以发生在继承关系中。
5、“方法重载”实现的是编译时多态,也就是静态多态性
二、JAVA接口:
public interface Actionlistener{
public abstract void actionPerformed(ActionEvent event);
}
1、一个类可以实现多个接口。
2、接口的方法只能是抽象的、公开的,abstract/public可以省略,还要确定接口的返回值及参数。接口可以有public、static和final属性。
3、接口不能有构造器,
4、一个类可以实现多个接口,声明方式 class son implements interfaceName1,interfaceName2{},其实这种声明的完整表达方式是class son extends Object implements interfaceName1,interfaceName2{}.
5、接口可以包含域,但是这些域不是接口的一部分,它们的值被存储在该接口的静态存储区内;域隐式为public、static、final的(域名通常大写且单词之间以下划线连接),域不能是“空final”,在使用之前必须显式地初始化,但可以被非常量表达式初始化。
6、如果一个类实现了一个接口,而没有实现接口的所有方法,则它必须被标注为abstract(抽象类)。一个抽象类的子类必须实现它未完成的方法,假如该项子类仍不会实现接口的所有方法,那么该项子类依然需要被标注为abstract。
三、抽象类:含了抽象方法的一个类叫作“抽象类”。
即使不包括任何abstract 方法,亦可将一个类声明成“抽象类”。如果一个类没必要拥有任何抽象方法,而且我们想禁止那个类的所有实例,这种能力就会显得非常有用。