方法的覆盖(重写)

本文探讨了子类如何通过方法覆盖来改变从父类继承的行为,并解释了为什么子类无法覆盖父类的private方法。此外,还说明了静态方法在继承中的特性——它们只能被隐藏而非覆盖。

(1)子类可以继承父类的所有方法和属性,但是有时候,子类需要修改父类中定义的方法的实现,这就是方法覆盖
(2)子类会继承父类的private方法,但是子类可以覆盖父类的private方法吗?
不能,只有能被子类访问的方法,才能被子类覆盖。
(3)静态方法只能被隐藏,不能被覆盖。代码示例:

public class Super {
    public String getName(){
        return "Richard";
    }
    public static String greeting(){
        return "Good night";
    }
}
public class Sub extends Super {
    public String getName(){
        return "Dick";
    }
    public static String greeting(){
        return "Hello";
    }
}
public class Test {
    public static void main(String[] args) {
        Super s1=new Sub();
        System.out.println(s1.greeting()+","+s1.getName());

        Sub s2=new Sub();
        System.out.println(s2.greeting()+","+s2.getName());
    }
}

运行结果:
Good night,Dick
Hello,Dick
这里写图片描述

### 方法覆盖方法重写的定义与区别 方法覆盖(Override)与方法重写(有时也称为覆盖)在编程中是同一个概念,通常用于描述子类重新定义从父类继承的方法。这一机制支持运行时多态,使得程序在执行时可以根据对象的实际类型调用相应的方法。例如,在 Java 中,子类可以重写父类的方法,以提供特定的实现。 在定义上,方法覆盖要求子类中的方法与父类中被重写方法具有相同的方法名、参数列表和返回类型。此外,访问权限不能比父类中的方法更严格,且抛出的异常不能比父类方法更多或更宽泛。 ```java class Animal { public void makeSound() { System.out.println("Some sound"); } } class Dog extends Animal { @Override public void makeSound() { System.out.println("Bark"); } } ``` ### 方法覆盖方法重写的实现方式 在 Java 中,使用 `@Override` 注解可以明确指出一个方法是打算重写父类中的方法。这不仅有助于编译器检查是否确实存在可重写方法,还能提高代码的可读性和可维护性。 Python 中的方法重写更为灵活,因为 Python 是动态类型的,不需要严格遵循参数和返回类型的匹配规则: ```python class Animal: def make_sound(self): print("Some sound") class Dog(Animal): def make_sound(self): print("Bark") ``` 在实现方法覆盖时,应确保子类的方法行为符合预期,并且在逻辑上是对父类方法的合理替代,以避免违反 Liskov 替换原则。 ### 方法覆盖方法重载的区别 方法重载(Overload)与方法覆盖不同,它是指在一个类中可以有多个同名的方法,但这些方法的参数列表(参数的类型、个数或顺序)必须不同。返回值类型的不同不足以构成方法的重载。方法重载是 Java 多态的一种表现形式,它允许使用相同的方法名处理不同的数据类型或数量的参数。 ```java public class Calculator { public int add(int a, int b) { return a + b; } public double add(double a, double b) { return a + b; } } ``` ### 方法重构的概念 方法重构是指在不改变外界访问的情况下对代码进行修改,但不改变原方法的效果,目的是提高其性能,使程序更加易读、可维护。重构是在不改变软件可观察行为的前提下改善其内部结构。重构通常不是一次性的,它贯穿软件的整个生命周期,只要觉得不合理都是重构的时机。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值