`

Java重写与重载

    博客分类:
  • Java
阅读更多

 

   方法的重写Overriding和重载OverloadingJava多态性的不同表现。

重写Overriding是父类与子类之间多态性的一种表现,如果在子类中定义某方法与其父类有相同的名称和参数,且方法的返回值类型与抛出异常的类型各自与父类的一致,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。

   重载Overloading是一个类中多态性的一种表现。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)Overloaded的方法是可以改变返回值的类型。

  另外:static,native及synchronized方法不能被重写.

如果你认为重写只是在子类中简单的替换了一个方法,你就很容易认为static 方法也能 被重写。事实上,我有很多包含们举例指明static 方法能被重写的代码的邮件。然而,这 些并没有考虑方法重写在运行时决定哪个版本的方法被调用的细节问题。下面的代码似乎表 明static 方法是怎样被重写的。

 

class Base {
	static void amethod() {
		System.out.println("Base.amethod");
	}
}

 

public class Cravengib extends Base {
	public static void main(String arg[]) {
		Cravengib cg = new Cravengib();
		cg.amethod();
	}

	static void amethod() {
		System.out.println("Cravengib.amethod");
	}
}

 

   如果你编译并运行这段代码,你会发现输出文本Cravengib.amethod,这似乎很好的指 明了重写。然而,对于重写,还有相对于在子类中使用一个方法简单替换另一个方法更多的 东西。还有运行时决定的方法基于引用的类的类型的问题,这可以通过创建正在被实例化的 类的引用类型(实例初始化语句的左半部分)来说明。 在上面的例子中,因为名字叫amethod 的方法与类发生了关联,而不是与特定的类的实 例相关联,它不在乎什么类型的类正在创建它,而仅仅在意用的类型。因此,如果你在调 用amethod 前改变一下这一行,
Base cg= new Cravengib()
你就会发现当你运行程序时,你会得到输出:Base.amethod cg 是一个类Cravengib 在内存中的一个Base 类型的实例的引用(或者指针)。如果一个static 方法被调用了,JVM 不会检查什么类型正在指向它,它只会调用跟Base 类相关实例。
与上面的情况相对比:当一个方法被重写时,JVM 通过句柄检查正在指向的类的类型, 并调用此类型相关的方法。可以结束这个例子了,如果你将两个版本的amethod 方法改变为 非static,并依然创建类:
Base cg= new Cravengib()
编译并运行上述代码,你会发现amethod 已经被重写了,并且输出Cravengib.amethod。

  

 

分享到:
评论

相关推荐

    Java重写与重载(区别与用途)

    我根据我的理解来谈谈Java中重写方法与重载方法的区别。  重写  Java 中重写又叫覆盖,主要是指继承(extends)父类或者实现(implements)接口时将父类或者接口中已经存在的方法进行重新定义。重写的方法在父类...

    Java重写和重载概念及区别梳理

    3. **与访问权限、返回类型无关**:重载与访问权限和返回类型无关,仅依赖于方法的参数列表。 在实际开发中,重写和重载经常结合使用,以实现代码的灵活性和可扩展性。例如,在设计模式中,模板方法模式和策略模式...

    JAVA重写和重载.pdf

    JAVA重写和重载(Overriding和Overloading) JAVA中有两种不同的多态性表现形式:重写(Overriding)和重载(Overloading)。下面将对这两种形式进行详细的解释。 重载(Overloading) 重载是指在一个类中可以...

    Java 重写与重载方法与区别详解

    Java中的方法重写(Override)和重载(Overload)是两种不同的概念,它们都是多态性的体现,但实现方式和目的各有不同。 **重写(Override)** 重写发生在继承关系中,当子类继承父类后,可以对父类中已有的非...

    Java重写重载线程

    ### Java中的方法重载与重写以及线程概念详解 #### 一、方法重载(Overloading) 在Java中,**方法重载**是指在同一个类中定义多个具有相同名称但参数列表不同的方法。这里提到的“参数列表不同”不仅包括参数的...

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

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

    Java重写与重载之间的区别

    Java中的重写(Override)和重载(Overloading)是两个关键的概念,它们都是多态性的体现,但各自有着不同的特点和应用场景。 首先,我们来深入理解一下**重写(Override)**。重写发生在继承关系中,当子类继承父类后,...

    java中的重载和重写的区别

    Java中的重载(Overloading)和重写(Overriding)是面向对象编程中两个重要的概念,它们体现了Java的多态性。多态性是面向对象编程的三大特性之一,另外两个是封装和继承。 首先,让我们详细解释一下方法的重载。重载...

    java中重载与重写

    在Java编程语言中,方法的重载(Overloading)与重写(Overriding)是两个非常重要的...通过对比分析,我们可以更加清晰地理解Java中重载与重写之间的区别及其应用场景。这对于编写高效、可维护的Java代码至关重要。

    重写与重载.png java分析

    重写与重载.png java分析

    Java中重载和重写总结

    Java 中重载和重写总结 Java 中的重载(Overloading)和重写(Overriding)是两个非常重要的概念,它们都是多态性的体现形式。 一、Java 中的重载(Overloading) Java 中的重载是指在同一个类中可以创建多个...

    java 函数的重载和重写实例代码

    在Java中,函数的重载(Overloading)和重写(Overriding)是多态性的重要表现形式,它们都是实现面向对象设计原则的关键手段。 1. 重载(Overloading): 重载发生在同一个类中,它允许我们创建多个同名的方法,...

    java面向对象重载和重写

    面向对象是Java编程的核心概念,其中“重载”(Overloading)和“重写”(Overriding)是两个至关重要的概念。理解并熟练运用这两个概念,对于提升Java编程能力至关重要。 首先,我们来探讨“重载”。在Java中,...

    Java重写(Override)与重载(Overload)区别原理解析

    Java重写(Override)与重载(Overload)区别原理解析 Java 编程语言中有两个重要的概念:重写(Override)和重载(Overload)。这两个概念经常被混淆,但它们具有不同的作用和特点。本文将详细地介绍 Java 中的重写和...

    Java的重载和重写

    Java编程语言中的重载(Overloading)和重写(Overriding)是两个关键的概念,它们都是多态性的重要体现,但各自有着不同的含义和规则。 首先,我们来详细了解一下方法的重载。重载,简单来说,就是在一个类中定义多个...

    Java 重写(Override)与重载(Overload).pdf

    根据提供的文件信息,我们可以深入探讨Java中的两个核心概念:重写(Override)与重载(Overload)。这两个概念在面向对象编程中非常重要,尤其是在Java这样的语言中。 ### Java中的重写(Override) #### 什么是重写? ...

    重载,重写,覆盖,多态

    ### 重载、重写、覆盖与多态的深刻剖析 在面向对象编程语言中,如Java、C#等,重载(Overloading)、重写(Overriding)、覆盖(也称为重写)以及多态(Polymorphism)是几个非常重要的概念。它们之间既有关联又有...

    重写与重载的区别共2页.pdf.zip

    在编程领域,重写(Override)与重载(Overload)是两个非常重要的概念,尤其在面向对象编程中。它们都是实现多态性的方式,但各自有着不同的含义和使用场景。接下来,我们将深入探讨这两者的区别。 首先,重载...

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

    而重载与`final`关键字无关。 - **static与非static**:静态方法不能被重写,但可以重载。非静态方法可以重写和重载。 理解并熟练掌握方法重写和方法重载是Java编程中的基本技能,它们对于实现多态、代码复用以及...

Global site tag (gtag.js) - Google Analytics