Java子类重写父类的方法

本文详细解析了Java中子类如何正确重写父类方法的四个关键要素:方法名一致、访问权限扩大、参数匹配及返回值类型兼容。通过具体代码示例,深入浅出地介绍了方法重写的规则和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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方法,那么子类隐藏父类的方法,而不是重写父类方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值