package com.lixing.mianxiangduixiang03;
class Test {
public void t1(String s) {
System.out.println("Test.t(String):" + s);
}
public void t2(int i) {
System.out.println("Test.t2(int):" + i);
}
public void t3() {
t1("override");
}
}
public class OverrideTestextends Test {
//此处写与不写都能覆盖基类的t(String)方法
@Override
public void t1(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);
}
@Override
public void t3() {
t1("override 3");
}
public static void main(String[] args) {
OverrideTest ot =new OverrideTest();
ot.t1("china34420");
ot.t2(1.0f);
ot.t2(1);
ot.t3();
//output
//OverrideTest.t(String):china34420
//OverrideTest.t2(float):1.0
//Test.t2(int):1
//OverrideTest.t(String):override 3
//ZH总结
//重写方法的规则:方法名 参数列表 返回值必须相同,访问修饰符大 异常小
//1、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。
//2、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。
//3、访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
//4、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。
// 例如:父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。
//重载的规则:方法名相同,其他全部都可以不同没要求
//1、必须具有不同的参数列表;
//2、可以有不同的返回类型,只要参数列表不同就可以了;
//3、可以有不同的访问修饰符;
//4、可以抛出不同的异常;
}
}
网友评论