Java子类重写父类的方法

Java子类重写父类的方法

一、方法名一致

//这是父类
public class SuperClass {

    public void test(){
        System.out.println("我是父类的方法");
    }
}
//这是子类
public class SubClass extends SuperClass{

    //重写了父类的方法
    public void test(){
        System.out.println("我是子类的方法");
    }
}
//这是测试类
public class TestMain {

    public static void main(String[] args) {
        SubClass subClass = new SubClass();
        subClass.test();
    }
}

输出结果:

我是子类的方法

总结:子类要重写父类的方法,子类方法名必须与父类一致

二、子类的访问权限要大于或等于父类

//这是父类
public class SuperClass {

    void test1(){
        System.out.println("我是父类的方法1");
    }

    void test2(){
        System.out.println("我是父类的方法2");
    }

    protected void test3(){
        System.out.println("我是父类的方法3");
    }
}
//这是子类
public class SubClass extends SuperClass{

    //重写了父类的方法1(访问权限一致,都是缺省)
    void test1(){
        System.out.println("我是子类的方法1");
    }

    //重写了父类的方法2(访问权限大于父类的 protected > 缺省)
    protected void test2(){
        System.out.println("我是子类的方法2");
    }

    //重写了父类的方法3(访问权限大于父类的 public > protected)
    public void test3(){
        System.out.println("我是子类的方法3");
    }
}
//这是测试类
public class TestMain {

    public static void main(String[] args) {
        SubClass subClass = new SubClass();
        subClass.test1();
        subClass.test2();
        subClass.test3();
    }
}

输出结果:

我是子类的方法1
我是子类的方法2
我是子类的方法3

总结:子类要重写父类的方法,子类方法的权限修饰符访问权限必须大于或者等于父类方法的权限修饰符访问范围

三、参数个数、类型、顺序必须一致

//这是父类
public class SuperClass {

    public void test(int i,String s){
        System.out.println("我是父类的方法"+i);
        System.out.println("我是父类的方法"+s);
    }
}
//这是子类
public class SubClass extends SuperClass{

    //没有重写父类的方法
    public void test(){
        System.out.println("我是子类的方法");
    }

    //没有重写父类的方法
    public void test(int i){
        System.out.println("我是子类的方法");
    }

    //没有重写父类的方法
    public void test(String s){
        System.out.println("我是子类的方法");
    }

    //没有重写父类的方法
    public void test(String s,int i){
        System.out.println("我是子类的方法");
    }

    //重写了父类的方法
    public void test(int i,String s){
        System.out.println("我是子类的方法");
    }
}
//这是测试类
public class TestMain {

    public static void main(String[] args) {
        SubClass subClass = new SubClass();
        subClass.test(0,"s");
    }
}

输出结果:

我是子类的方法

总结:子类要重写父类的方法,子类方法的参数个数、参数类型、参数顺序必须与父类方法的一致

四、返回值一致或者是父类的子类(实现类)

//这是父类
public class SuperClass {

    public Map test1(){
        Map map = new HashMap();
        System.out.println("我是父类的方法1");
        return map;
    }

    public List test2(){
        List list = new ArrayList();
        System.out.println("我是父类的方法2");
        return list;
    }
}
//这是子类
public class SubClass extends SuperClass{

    //重写了父类的方法(返回值一致)
    public Map test1(){
        Map map = new HashMap();
        System.out.println("我是子类的方法1");
        return map;
    }

    //重写了父类的方法(返回值是父类的实现类)
    public ArrayList test2(){
        ArrayList arrayList = new ArrayList();
        System.out.println("我是子类的方法2");
        return arrayList;
    }
}
//这是测试类
public class TestMain {

    public static void main(String[] args) {
        SubClass subClass = new SubClass();
        subClass.test1();
        subClass.test2();
    }
}

输出结果:

我是子类的方法1
我是子类的方法2

总结:子类要重写父类的方法,子类方法的返回值必须与父类的一致,或者子类方法的返回值是父类方法返回值的子类或者实现类,如果返回值不满足,则编译错误

注意:
1、父类中 final 修饰的方法不可以被子类重写
2、父类中 private 修饰的方法,子类访问不到,故也不可以重写
3、如果父类是static方法而子类是实例方法,或者相反都会报错。如果父类和子类都是static方法,那么子类隐藏父类的方法,而不是重写父类方法。

  • 18
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java子类重写父类方法的时候,有几个易错点需要注意: 1. 方法名、参数列表和返回类型必须与父类方法一致:子类重写方法必须与父类方法具有相同的方法名、参数列表和返回类型。如果不一致,会导致编译错误。 2. 访问修饰符不能更严格:子类重写方法的访问修饰符不能比父类方法更严格。例如,如果父类方法是public,那么子类方法可以是public或者protected,但不能是private。如果违反了这个规则,编译器会报错。 3. 子类方法不能抛出比父类方法更宽泛的异常:子类重写方法不能抛出比父类方法更宽泛的异常。也就是说,子类方法可以抛出与父类方法相同的异常或者其子类异常,或者不抛出异常,但不能抛出父类方法没有声明的异常。如果违反了这个规则,编译器会报错。 4. 子类方法不能降低访问修饰符:子类重写方法不能降低父类方法的访问修饰符。例如,父类方法是public,那么子类方法也必须是public,而不能是protected或者default。如果违反了这个规则,编译器会报错。 5. 子类方法不能使用final修饰符:子类重写方法不能使用final修饰符。final修饰符用于限制方法重写,如果在子类中使用final修饰方法,编译器会报错。 总结起来,子类重写父类方法需要遵守方法签名一致、访问修饰符不能更严格、不能抛出更宽泛的异常、不能降低访问修饰符、不能使用final修饰符这几个规则。如果不遵守这些规则,编译器会报错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值