`

方法重写

 
阅读更多


 一、子类与父类方法的关系

1、延续 父类存在子类不存在
 2、新增 父类不存在子类存在
 3、重写 父类子类都存在

 

ps:分析方法调用的规则

编译时:从左边的引用类型开始分析,追溯到Object类

运行时:从右边的对象类型开始分析,追溯到Object类.

 

二、使用程序鉴定重写

1、@Override -->编译期:如果重写失败则编译错误

2、在父类 定义方法 ,调用

如下图:

在main方法中调用test(‘a’)方法。在编译时期test 会根据方法名和参数列表确认调用的print(int)。但是,在运行时期从对象开始分析则会调用pig类的print(int)方法



三、重写的条件(用眼睛来判断重写)
总体:在合理范围内提高子类可见性
存在继承关系+方法签名必须相同+下面3条
1、返回类型 :void和基本类型必须等于void或基本类型。引用类型重写方法的返回值是父类方法返回值的子类或与父类方法返回值类型相同

2、可见性 子类方法的可见性必须大于等于父类。(如:父类方法是default则子类重写的方法只能是default或public)

3、重写方法抛出的异常必须是父类方法抛出异常的子类或与父类方法抛出异常类型相同。

如:

Animal print()  throws Exception

Animal print () throws RuntimeException 

 

四、不能被重写的方法

1、私有方法不能被重写,但是加上@Override 才会在编译时期报错

2、静态方法不能被重写,如果子类要写一个与父类静态方法相同签名的方法,则这个方法必须声明为static

3、final 方法 不能重写 ,否则会出现编译错误

 

五、一个神奇的现象




 B b = new B();

D d = new D();
b.show(d)

输出的结果是 A and D  

这个实验说明这样一个问题:

在编译的时候,如果this中找不到与实际参数类型相同的方法,会先到父类里面寻找。如果找不到,才考虑使用形参为实际参数父类的方法。
 

 

 

 

 

 

  • 大小: 36.7 KB
  • 大小: 48.7 KB
  • 大小: 47.3 KB
  • 大小: 5.1 KB
分享到:
评论

相关推荐

    方法重载和方法重写

    在编程语言中,方法重载(Overloading)和方法重写(Overriding)是两个非常重要的概念,它们都是实现多态性(Polymorphism)的关键机制。本文将深入探讨这两个概念,以及它们在实际编程中的应用。 ### 方法重载...

    JAVA中的方法重写与方法重载区别

    JAVA中的方法重写与方法重载区别 JAVA 中的方法重写和方法重载是两个重要的概念,在面向对象程序设计语言中尤为重要。方法重写和方法重载都是多态性的体现,但它们之间有着本质的区别。 方法重写(Override)是指...

    C# Equals 和 GetHashCode 方法重写

    ### C# Equals 和 GetHashCode 方法重写 在C#编程中,`Equals` 和 `GetHashCode` 方法是非常重要的成员方法,它们对于确保对象的正确比较以及高效地存储和检索对象至关重要。这两个方法通常需要在自定义类中进行...

    静态(static)方法重写(override)

    在面向对象编程语言中,如Java,方法重写(override)是一种重要的特性,它允许子类提供一个与父类相同签名的方法实现。这种方法的实现允许在运行时根据对象的实际类型来确定调用哪个版本的方法,这正是多态性的基础...

    Java 继承和方法重写

    方法重写则是继承机制中一个关键的特性,允许子类对父类的方法进行定制化,以满足特定需求。 **一、Java 继承** 1. **定义与语法**: Java 中的继承使用 `extends` 关键字实现。例如,如果 `Animal` 是一个类,`...

    方法重写.zip

    在Java编程语言中,"方法重写"(Method Overriding)是面向对象特性的一个关键概念。它发生在子类继承父类时,子类可以提供一个与父类中相同签名的方法,但实现可能不同。这种方法重写允许子类扩展或定制父类的功能...

    EXT dojochina Ext方法重写.rar

    EXT dojochina Ext方法重写是一个关于EXT.js框架中函数重写的专题。EXT.js是一个流行的JavaScript库,用于构建富客户端应用,它提供了丰富的组件、布局管理和数据绑定机制。在EXT.js中,方法重写是一种常见的实践,...

    Java方法重载和方法重写的区别.docx

    Java编程语言中,方法的两种重要特性是方法重载(Overloading)和方法重写(Overriding)。这两种机制都是为了实现多态性,但它们在实际应用中有着明显的区别。 **方法重载(Overloading)**: 方法重载发生在同一...

    Java中方法重写与方法重载的比较.pdf

    Java中的方法重写(Overriding)与方法重载(Overloading)是面向对象编程中两个重要的概念,它们在实现多态性和代码复用时起到关键作用。本文将深入探讨这两个概念,以及它们在Java编程中的具体应用和区别。 1. **...

    方法重写(覆盖)

    方法重写,也称为方法覆盖,是面向对象编程的一个重要特性。在Java中,当子类继承父类时,它可以重写父类中已存在的方法,以实现不同的功能或者优化原有功能。重写允许子类根据自身的需求对父类的行为进行定制。 1....

    方法重写equals和多态

    在Java编程语言中,"方法重写equals"和"多态"是两个核心概念,尤其对于面向对象的设计和实现至关重要。下面将详细解释这两个概念及其相互关系。 **方法重写equals()** 在Java中,`equals()`方法是Object类的一个...

    第05章 面向对象(下) 03 方法重写与super关键字

    面向对象编程是Java语言的核心特性,本章将深入探讨面向对象设计中的一个重要概念——方法重写与`super`关键字的使用。在Java中,方法重写(Method Overriding)是子类对父类中已有方法的一种扩展或定制,它允许子类...

    两种重写方法的内存机制

    在编程语言如C#中,`new`和`override`关键字用于处理类的继承和方法重写,这两种机制涉及到内存管理和多态性。本文将详细解释这两种重写方法的内存机制,并通过实例来阐述它们的区别。 首先,让我们回顾一下继承...

    Java 2023.7.12(方法重写/重载、多态、抽象类/方法、instanceof)

    在Java编程语言中,方法重写(Method Overriding)和重载(Method Overloading)、多态(Polymorphism)、抽象类(Abstract Class)与抽象方法(Abstract Method)以及`instanceof`关键字是核心的面向对象特性。...

    Java常见笔试、面试题目深度剖析,方法重写详解、静态代码块与构造方法执行顺序问题

    本文将深度剖析几个常见的Java面试题目,包括方法重写、静态代码块和构造方法的执行顺序。 首先,我们来讨论**方法重写(Override)**。在面向对象编程中,子类可以继承父类的属性和方法,有时需要根据自己的需求对...

    重写equals方法

    "equals 方法重写详解" 在 Java 中,equals 方法是一个非常重要的方法,它用于判断两个对象是否相等,而不是判断两个对象的引用是否相同。在 Object 基类中,equals 方法的实现是使用“==”操作符来比较对象的引用...

    课堂笔记08(静态代码块-继承-对象构造-方法重写-关键字

    【标题】中的“静态代码块-继承-对象构造-方法重写-关键字”涉及的是Java编程语言中的核心概念。下面将分别对这些知识点进行详细解释。 1. 静态代码块:在Java中,静态代码块是一段用花括号{}包围的代码,前面有...

    基于memcahe的session方法重写(PHP)

    PHP session跨服务器跨域解决方案 基于memcahe的session方法重写

    3 Java中关于==和equal的区别 以及equals()方法重写

    Java 中关于 == 和 equal 的区别 及其 equals() 方法重写 Java 语言是 Sun 公司的开发成果,其主要特点是可以执行强,与平台的无关性使其实用性更强。但是 Java 中的 == 与 equal 是有区别的。 == 操作符是 Java ...

    AbstractTest.java帮助理解多重继承、抽象方法重写调用、super、this关键字、构造方法、重载知识点

    定义抽象类以及抽象方法,构造方法,将子类1定义为抽象类,子类2继承子类1,子类2重写抽象方法。用以帮助理解多重继承、抽象方法重写调用、super、this关键字使用、构造方法、重载这几个的知识点

Global site tag (gtag.js) - Google Analytics