@Override与方法的重写

本文通过示例代码展示了Java中如何进行方法复写,包括使用@Override注解及父类方法的调用方式,并解释了子类如何通过父类引用调用自身的方法实现。

@Override注解可以帮助检查父类中是否有该方法,但不加@Override,子类也可以复写父类的方法,且可以使用父类的引用调用该方法。

class A {
    public void sayInA(int p ){
        System.out.println("In A:"+p);
    }

    public void sayInAA(int p ){
        System.out.println("In A:"+p);
    }
}

class B extends A{

    public B(){
        super();
        System.out.println("say some thing");
    }

    public void sayInA(int p ){
        System.out.println("In B:"+p);
    }
}

    public static void main(String[] args) {
        A b = new B();
        b.sayInA(5);
    }

output:

In B:5


main方法中的引用b实际上指向的对象是B的对象,调用的B中方法的实现。


class B extends A{

    public B(){
        super();
        System.out.println("say some thing");
    }

    public void sayInA(int p ){
        System.out.println("In B:"+p);
        super.sayInAA(p);
        super.sayInAA(p);
    }
}

另外,在子类中可以任意调用父类的方法,但在子类的构造方法中,如果要调用父类的构造方法,那必须放在首行,因为父类在构造方法要初始化,子类在构造方法中可能会用到父类初始化的变量。


### 方法重写@Override)在类的多态中的使用和作用 方法重写Override)是Java中实现多态性的重要机制。通过子类重新定义从父类继承的方法,可以在运行时根据对象的实际类型调用相应的方法[^1]。这种行为使得程序可以通过父类的引用调用子类的方法,从而实现了动态绑定和多态性[^5]。 #### 1. 方法重写的规则 在Java中,方法重写需要满足以下条件: - 子类中的方法必须父类中的方法具有相同的方法名、参数列表和返回类型。 - 子类中的方法不能比父类中的方法具有更严格的访问权限。例如,如果父类中的方法是`public`,子类中的方法也必须是`public`[^3]。 #### 2. 使用场景 方法重写通常用于以下场景: - **扩展功能**:子类可以扩展或修改父类方法的行为以适应特定需求。 - **多态性实现**:通过父类类型的引用调用子类中重写方法,从而实现运行时的多态性[^5]。 - **接口实现**:当一个类实现接口时,它实际上是在重写接口中声明的抽象方法。 #### 3. 示例代码 以下是一个简单的示例,展示了方法重写如何在多态中发挥作用: ```java // 父类 class Animal { void makeSound() { System.out.println("Some generic sound"); } } // 子类 class Dog extends Animal { @Override void makeSound() { System.out.println("Bark"); } } class Cat extends Animal { @Override void makeSound() { System.out.println("Meow"); } } public class Main { public static void main(String[] args) { Animal myAnimal = new Animal(); Animal myDog = new Dog(); Animal myCat = new Cat(); myAnimal.makeSound(); // 输出: Some generic sound myDog.makeSound(); // 输出: Bark myCat.makeSound(); // 输出: Meow } } ``` 在这个例子中,`Animal`类有一个`makeSound`方法,而`Dog`和`Cat`类分别重写了这个方法。通过父类类型的引用调用`makeSound`方法时,实际执行的是子类中重写方法。 #### 4. 注意事项 - 如果子类方法的签名父类方法不同,则不会发生方法重写,而是被视为方法重载[^4]。 - 使用`@Override`注解可以帮助编译器检查方法是否正确地重写了父类中的方法,避免因方法签名错误导致的意外行为[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值