Java || 重写和@Override

本文介绍了Java中的方法重写概念及其实现方式,包括重写的特点、与重载的区别,并通过示例展示了如何在子类中重写父类的方法。

1 java中的重写

1.1 概述

当子类需要父类的功能,而子类有新的内容,就可以重写父类中的方法。
实际开发中,代码量的逐渐增加,维护成了很大的问题,如果需要对某个方法进行修改,其代码本身、父类、子类的功能都会受到影响。重写则很好的解决了这个问题。

【重写的特点】

  1. 在子类和父类中,出现了方法声明相同的情况
  2. 子类要重写的函数,权限修饰符不能比父类的低(punlic < protected < default < private)
  3. 父类的私有的方法,子类不能进行重写

【重写和重载的区别】

  1. 重写:子类和父类中的方法相同,其函数名、参数列表、返回值类型 都相同。
  2. 重载:指在同一个类中,多个函数名相同,但他们的参数列表(个数、数据类型)不同。

1.2 代码实例

先创建 Person.java

package Rewrite; 
public class Person {    
   public void walk()    
   {
       System.out.println("走路!");
   }    
   public void run()    
   {
       System.out.println("跑步!");
   }
   public void work()    
   {        
       System.out.println("工作!");    
   } 
}   


再创建 Son.java子类。Son子类继承Person父类,并对父类的work()方法进行重写

package Rewrite;
public class Student extends Person  {    
   public void work()    
   {        
       super.work();       //使用super关键字调用父类方法
       System.out.println("学习!"); 
       System.out.println("娱乐!");
   }
}


Main.java中调用

package Rewrite; 
public class Main {
   public static void main(String[] args)    
   {
       Person per = new Person();      //创建父类对象        
       per.eat();        
       per.work();        
       per.sleep();        
       Son stu = new Son ();        //创建子类对象
       stu.work();
   }
}

2 java中的@Override的含义

@Override是伪代码,表示重写(可写可不写)

【好处】

  1. 可以当注释使用,方便阅读;
  2. 编译器可以进行验证 @Override下面的方法名是否是父类中所存在的函数,如果没有则会报错。
    例如,父类里面的函数为run(),在子类里面没有写 @Override,然后又把函数写成了run1(),这时编译器是可以编译通过的,因为编译器会认为这个方法是自己的子类中增加的方法,这样就没有达到重写的意义

【举例】
在重写父类的 onCreate 时,在方法前面加上 @Override,系统可以帮助检测方法的正确性。

@Override
public void onCreate(Bundle savedInstanceState)
{
   ……
}

这种方式是正确的。当写成如下的话,编译器就会报错The method oncreate(Bundle) of type HelloWorld must override or implement a supertype method,来保证正确重写onCreate方法。

@Override
public void oncreate(Bundle savedInstanceState)
{
   ……
}

而如果你不加 @Override,则编译器将不会检测出错误,而是会认为你为子类定义了一个新方法 oncreate

Java中,方法重写(Override)是指子类重新定义从父类继承来的方法。这一机制允许子类提供特定于自身的实现,同时保持与父类相同的接口。为了确保方法确实是重写的而非新定义的,Java提供了`@Override`注解作为编译时检查工具。 ### 方法重写的语法 当一个子类定义了一个与父类方法具有相同签名(方法名、参数列表返回类型)的方法时,即视为对该方法的重写。例如: ```java class Parent { void display() { System.out.println("Parent display"); } } class Child extends Parent { @Override void display() { System.out.println("Child display"); } } ``` 在这个例子中,`Child`类中的`display`方法覆盖了`Parent`类中的同名方法[^4]。 ### `@Override` 注解的作用 `@Override`注解用于指示编译器该方法意图覆盖超类中的方法。如果实际并没有覆盖任何方法,则会导致编译错误。这有助于避免因拼写错误或不正确的签名而导致意外创建新的方法而不是覆盖现有的方法。此外,它提高了代码可读性,明确表明了开发者的意图是进行方法重写[^4]。 ### `override fun` 与 `@Override` 的区别 需要注意的是,在标准的Java语言规范中,并没有`override fun`这样的关键字组合。可能您提到的是其他编程语言如Kotlin中的概念。在Kotlin里,要重写一个开放(open)方法,需要使用`override`修饰符: ```kotlin open class Parent() { open fun display() { println("Parent display") } } class Child : Parent() { override fun display() { println("Child display") } } ``` 这里`override`关键字直接参与到了方法声明之中,这是Kotlin语言的设计特性之一,而Java则通过`@Override`注解达到类似的目的。两者的主要区别在于语法层面以及它们所属的不同编程语言环境。Java使用注解系统来标记这些情况,而Kotlin采用更显式的关键词方式。 ### 总结 - Java中使用`@Override`注解来标记那些旨在覆盖父类方法的方法。 - 在Kotlin等其他JVM语言中可能会有`override fun`这样的构造来执行相同的功能。 - 使用`@Override`可以帮助开发者捕捉到潜在的错误,提高代码质量。 - 不同的语言有不同的语法来表达相同的概念,理解每种语言的具体用法是非常重要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值