java中什么是重写?

重写(Override)

比如,

定义Father类

1:姓名,吃饭方法,吃窝窝头。

2:定义Son类,继承Father

1:Son类中不定义任何成员,子类创建对象,仍然可以调用吃饭的方法。

2:父类的吃饭的方法,Son不愿吃。Son自己定义了吃饭的方法。

1:此时父类中有一个吃饭的方法,子类中有2个吃饭的方法,一模一样,只是方法体不一样。

2:一个类中两个函数一模一样,是不允许的。

1:编译运行,执行了子类的方法。

2:使用父类的方法,在子类方法中,使用super.父类方法名。


  1. class Father {
  2. String name;
  3. void eat() {
  4. System.out.println("吃窝窝");
  5. }
  6. }
  7. class Son extends Father {
  8. public void eat() { // 继承可以使得子类增强父类的方法
  9. System.out.println("来俩小菜");
  10. System.out.println("来两杯");
  11. System.out.println("吃香喝辣");
  12. System.out.println("来一根");
  13. }
  14. }
  15. class Demo8 {
  16. public static void main(String[] args) {
  17. Son s = new Son();
  18. //执行子类的方法
  19. s.eat();
  20. }
  21. }

3,该现象就叫做重写(覆盖 override)

1,在继承 中,子类可以定义和父类相同的名称并且参数列表一致的函数,将这种函数称之为函数的重写

4,前提

1,必须存在有继承关系

5,特点

1,当子类重写了父类的函数,那么子类的对象如果调用该函数,一定调用的是重写过后的函数,可以通过super关键字进行父类的重写函数的调用

2,继承可以使得子类增强父类的方法

6,细节

1,函数名必须相同

2,参数列表必须相同

3,子类重写父类的函数的时候,函数的访问权限必须大于等于父类的函数的访问权限否则会编译报错

4,子类重写父类的函数的时候,返回值类型必须是父类函数的返回值类型或该返回值类型的子类,不能返回比父类更大的数据类型,如子类函数的返回值类型是object

1:定义 A B  C类 B extends A

2:Father类中定义A getA();

3:Son 类中重写getA(); 方法,尝试将返回值修改为B,C ,Object

1:B编译通过

2:C 编译失败 ,没有继承关系

3:Object编译失败,比父类的返回值类型更大


  1. class A {
  2. }
  3. class B extends A {
  4. }
  5. class C {
  6. }
  7. class Father {
  8. String name;
  9. void eat() {
  10. System.out.println("吃窝窝");
  11. }
  12. // 定义一个函数,获取A类的对象,
  13. A getA() {
  14. return new A();
  15. }
  16. }
  17. class Son extends Father {
  18. public void eat() { // 继承可以使得子类增强父类的方法
  19. System.out.println("来两杯");
  20. System.out.println("来俩小菜");
  21. super.eat();
  22. System.out.println("来一根");
  23. }
  24. // B类是A类的子类
  25. B getA() {
  26. return new B();
  27. }
  28. }
  29. class Demo8 {
  30. public static void main(String[] args) {
  31. Son s = new Son();
  32. s.eat();
  33. }
  34. }

7,子类对象查找属性或方法时顺序

1,原则,就近原则

如过子类的对象调用方法,默认先使用this进行查找,如果当前对象没有找到属性或方法,把当前对象中维护的super关键字指向的对象,如果还没有找到变异报错,找到直接调用,

8,重载和重写的不同

1,重载(overload)

1,前提,所有的重载函数都必须在同一个类中

2,特点

函数名相同,参数列表不同,与其他的无关(访问控制符,返回值类型)

3,不同

个数不同、顺序不同、类型不同

2,重写(override)

1,前提,继承

2,特点

函数名必须相同,参数列表必须相同

子类的返回值类型要等于或者小于父类的返回值

原文地址:http://blog.51cto.com/13797478/2140691

时间: 2024-11-05 21:45:30

java中什么是重写?的相关文章

Java中的方法重写 与 final关键字

Java中的方法重写 与 final关键字 以下程序是否存在错误? class Base { private final void method() { System.out.println("In Base..."); } } class Sub extends Base { public void method() { System.out.println("In Sub..."); } } 答案 正确的. 使用final关键字可以声明类.成员变量和成员方法,一

java中重载与重写浅析

java中重载与重写浅析 Overloading (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义. 调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性. (3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以

java中重载与重写的区别

首先我们来讲讲:重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义. 调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性. (3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不

java中重载和重写

java中经常会有面试题考一些重载和重写的知识下面分析二者各自特性以及如何区分 (1)重载 (overload) 定义:java中允许方法名相同,但是参数列表不同,我们称之为方法的重载: 我们可以把 方法名 和 参数列表 定义为 方法签名:也就是方法签名包含方法名和参数列表两部分:一个类中是不可以有方法签名相同的两个方法,否则会报错的: 方法重载的意义:就是同一方法名根据传入的参数不同会有不同的方法功能:   具体举例就像超市的收银台可以收现金,可以刷卡,可以支付宝:可以微信,可以超市购物卡:收

Java中重载和重写的区别【转载】

首先我们来讲讲:重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义. 调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性. (3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不

《Java中方法的重写》

1 //方法的重写 2 /* 3 注意:方法的重写要遵循“两同两小一大”规则 4 “两同”即方法名相同.形参列表相同: 5 “两小”(1)指的是子类方法返回值类型比父类方法的返回值类型更小或相等,[什么意思?] 6 (2)子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等. 7 “一大”指的是子类方法的访问权限应比父类方法的访问权限更大或者相等. 8 9 特别注意:覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个是类方法,一个是实例方法. 10 例如下面代码会引起错误:

我理解的Java中重载与重写

程序中我们用方法来实现对对象的操作,但是对象可能有不同的数据类型,这时候对不同的数据类型,进行相同的操作,我们就可以用到方法的重载,即方法名相同,但是具有不同的参数列表. 方法的重载可以根据传递参数的数据类型不同来调用方法,也可以根据参数个数不同来设计. 重载必须有不同的参数列表,返回类型和访问修饰符可以不同,也可以抛出不同的异常. 重写用在子类对父类的继承之中,当我们想使用父类之中的方法,但是又想在方法体中改变操作的时候,就可以用到重写. 重写方法的参数列表和返回类型必须与被重写方法相同,访问

java中重载和重写的区别(首先需要了解一下 多态)

多态:通俗来说,总的来说,同一种形式,不同的表现. 太长不看系列: 所谓多态,是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定.因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体

Java中重载、重写与重构的区别

一.重载 重载的概念:在同一个类中允许同时存在一个以上的同名方法,只要这些方法的参数个数或类型不同即可. 重载的规则: 必须具有不同的参数列表. 可以有不同的返回类型,只要参数列表不同就可以了. 可以有不同的访问修饰符. 可以抛出不同的异常. 二.重写 重写的概念:(还可以称为覆盖)就是在子类中将父类的成员方法的名称保留,重写成员方法的实现内容,更改成员方法的存储权限,或是修改成员方法的返回值类型 重写的规则: 参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载. 访问修饰符的限制一