`

方法重载与上转型要注意的误区

 
阅读更多
//父类  super class
public class Super {

	String name = "parent";

	public String getName() {
		return name;
	}
	
}



//子类
public class Son extends Super{

	String name = "son";
   
                //重新父类中的方法
	public String getName() {
		return name;
	}
	
}





public class Test {

               // 父类中的成员变量是否能覆盖呢
	public static void main(String[] args) {
		Super su = new Son();
		System.out.println(su.getName());       // son
		System.out.println(su.name);               // parent
	}
	
}

 有上面的例子,我们可以看到,子类重写了(覆盖)父类中的方法 getName。我们用一个上转型的对象来分别调用类中的成员变量和方法,我们发现方法中输出的是子类的结果,而成员变量依旧是父类的结果。

 

以前我们通常认为:上转型对象无论是成员变量,还是成员方法都是优先访问子类的.

但上面的例子的结果似乎不太符合我们一贯的概念,我们思考一些方法重写的概念,子类中重写了父类一个非私有方法,该方法的参数,方法名,返回值均与父类相同,我们说 子类 重写(覆盖)了父类的方法。

但我们忽略了一条:只有动态方法才有override,静态方法,静态域,动态域都是不会被覆盖的。

简单的理解为,只有动态方法才能被覆盖,所以  su.name 压根就没被子类覆盖,所以它的结果应该是 parent.

分享到:
评论

相关推荐

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

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

    方法重载和方法重写

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

    重载与覆写/重写的区别

    (3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。  无法以返回值类型作为重载函数的区分标准。 复制代码 /** * 1. 方法重载只可以通过方法名和方法参数来...

    ASP.NET方法如何重载,文本文档

    1. **参数列表必须不同**:为了实现方法重载,至少需要有一个参数在数量或类型上与其它同名方法不同。 2. **返回类型不作为判断依据**:在进行方法重载时,即使返回类型不同,只要参数列表相同,也不会被认为是重载...

    C#重写重载与多态

    重载与返回值类型无关,它仅根据参数列表来决定调用哪个方法。例如: ```csharp public class MyClass { public void Test(int x, int y) {} public void Test(int x, ref int y) {} public void Test(int x, ...

    Java 中方法的重载与覆盖

    ### Java中的方法重载(Overloading)与方法覆盖(Overriding) #### 方法的重载(Overloading) 在Java中,方法重载允许我们定义多个同名的方法,但这些方法之间必须具备不同的特征来区分它们。这有助于提高代码的...

    Java方法重载

    注意,方法的重载与返回值和访问修饰符没有关系。 方法重载的优点是可以提高代码的复用性和可读性。例如,在 driver 类中,驾驶员可以驾驶汽车、飞机、轮船等不同的交通工具。使用方法重载,可以编写一个 drive ...

    JAVA方法的定义和方法的重载Overload.docx

    Java 方法的定义和方法的重载 Overload Java 方法是 Java 编程语言的基本组成部分之一。方法是解决问题的多行代码的集合,给予一个名字,以便多次使用。方法的定义和方法的重载是 Java 编程语言的基础知识,本文将...

    方法重载练习.mp4

    方法重载练习.mp4方法重载练习.mp4

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

     注意:方法的返回值类型不能用来区分重载的方法。这是因为当调用一个方法时,返回值的类型是不显示的。  2、重写  方法的重写是子类对父类的方法进行改造。  方法重写必须满足下列条件。  (1)子类的...

    63.java方法重载.zip

    63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java...

    64.java方法重载特点.zip

    64.java方法重载特点.zip64.java方法重载特点.zip64.java方法重载特点.zip64.java方法重载特点.zip64.java方法重载特点.zip64.java方法重载特点.zip64.java方法重载特点.zip64.java方法重载特点.zip64.java方法重载...

    65.java方法重载练习.zip

    65.java方法重载练习.zip65.java方法重载练习.zip65.java方法重载练习.zip65.java方法重载练习.zip65.java方法重载练习.zip65.java方法重载练习.zip65.java方法重载练习.zip65.java方法重载练习.zip65.java方法重载...

    Java编程中对象的创建与使用以及方法的重构与重载的区别说明

    ### Java编程中对象的创建与使用以及方法的重构与重载的区别说明 #### 对象的创建与使用 在Java编程语言中,一切皆基于对象。理解如何创建对象以及如何使用对象是学习Java的基础。 ##### 1. 对象的创建过程 创建...

    Java编程那些事儿55—方法重载和参数传递

    ### Java编程那些事儿55—方法重载和参数传递 #### 方法重载(Overloading) 在Java编程语言中,**方法重载**(Overloading)是一个非常重要的概念,它允许我们定义多个具有相同名称但参数列表不同的方法。这种方法...

    java中方法重载内存分析

    对于方法重载,每次调用不同的重载方法,都会在栈上创建一个新的栈帧,每个栈帧对应一个方法的执行上下文。 在分析内存分配时,我们需要关注以下几点: 1. **局部变量**:每个方法内部声明的变量都存储在当前方法...

    类继承方法重载

    在编程领域,类继承和方法重载是面向对象编程中的两个关键概念,它们极大地提高了代码的复用性和灵活性。在这个名为"practise"的压缩包文件中,我们可能找到一个关于这两个概念的实际应用示例。 首先,让我们深入...

    重载equals方法示例

    重载equals方法示例重载equals方法示例重载equals方法示例重载equals方法示例重载equals方法示例

    Java方法重载的实例

    Java方法重载是面向对象编程中的一个重要概念,它允许在一个类中定义多个具有相同名称但参数列表不同的方法。这样做的好处在于,通过方法名就可以直观地理解方法的功能,而具体的执行逻辑则由传入的参数类型和数量...

    C#02方法与方法重载.rar

    本资源"**C#02方法与方法重载.rar**"提供了学习这些概念的实践示例,通过一个基础的计算器应用来演示。让我们深入探讨一下这两个主题。 **方法**在C#中是一个包含一组指令的代码块,可以被多次调用。它们是程序的...

Global site tag (gtag.js) - Google Analytics