初学者完全搞懂override和overlode

override(重写):

1.方法名、参数、返回值不同。

2.子类方法不能缩小父类方法的访问权限。

3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛异常)

4.存在于父类和子类之间。

5.方法被定义为final时不能被重写。

6.父类中被private修饰的方法

7.静态方法不能被非静态方法重写

overload(重载):

1.参数类型、个数、顺序至少一种不相同。

2.不能重载只有返回值不同的方法名。

3.存在于父类和子类、同类中。

 

Java 中的覆盖@Override注解 写与不写的一点点理解

一般来说,写与不写没什么区别,JVM可以自识别

写的情况下:即说明子类要覆盖基类的方法,基类必须存在方法

(控制类型public,protected,返回值,参数列表类型)与子类方法完成一致的方法,否则会报错(找不到被Override的方法)。

在不写@Override注解的情况下,当基类存在与子类各种条件都符合的方法是即实现覆盖;

如果条件不符合时,则是当成新定义的方法使用。

所以如果想覆盖基类方法时,最好还是写上@Override注解,这样有利于编译器帮助检查错误

*/

//示例:

public class OverrideTest extends Test{

@Override//此处写与不写都能覆盖基类的t(String)方法

public void t(String s){

System.out.println("OverrideTest.t(String):" + s);

}

//此处不能写@Override注解,因为方法参数类型与基类的t2方法的参数类型不同

//所以此处只能新定义了一个t2(float)方法,并不能实现覆盖

public void t2(float f){

System.out.println("OverrideTest.t2(float):" + f);

}

public static void main(String[] args){

OverrideTest ot = new OverrideTest();

ot.t("china34420");

ot.t2(1.0f);

ot.t2(1);

ot.t3();

}

}

/*输出:

OverrideTest.t(String):china34420

OverrideTest.t2(float):1.0

Test.t2(int):1

OverrideTest.t(String):override

*/

 

class Test{

public void t(String s){

System.out.println("Test.t(String):" + s);

}

public void t2(int i){

System.out.println("Test.t2(int):" + i);

}

public void t3(){

t("override");

}

}

你可能感兴趣的:(初学者完全搞懂override和overlode)