0 0

一段代码,父类调用了子类重载的方法,求解释。5

public class Person {
	
	public void fight(){
		System.out.println("Person战斗");
		say();
	}
	
	public void say(){
		System.out.println("Person说话");
	}
	
}

 

public class Student extends Person {
	
	@Override
	public void fight() {
		System.out.println("Student战斗!");
		super.fight();
	}

	@Override
	public void say() {
		System.out.println("Student说话!");
	}
	
	public static void main(String[] args) {
		Student student = new Student();
		student.fight();
	}
	
}

/*

输出结果

Student战斗!

Person战斗!

Student说话!

*/

 
2013年5月10日 21:41

3个答案 按时间排序 按投票排序

0 0

采纳的答案

Student student = new Student();  
     student.fight();
调用子类的 fight方法 所以打印---Student战斗!

而子类中的方法中super.fight();
调用父类中的fight方法  打印--Person战斗!
父类中的fight中又调用了say方法 你感觉奇怪的是为什么不是打印父类中say方法中的--Person说话 而是打印子类中的--Student说话 它在调用say方法的时候首先是到父类里面找say方法 然后在到子类中找 在父子类中一样的方法 jvm会认为子类重写了父类的方法 所以调用的是子类的say方法  不相信你把父类的 say方法 改成sayDota()  这样都会打印出来 
    不对的请指正 继续向jinnianshilongnian膜拜!!!


2013年5月11日 02:14
0 0

这道题今天之前我也不会,不过现在懂了。嘿嘿。

2013年5月11日 21:24
0 0

你先子类继承了父类。那子类中就有了父类的方法。这叫重载
public class Student extends Person {
这里你在fight中改变了方法内容,就是重写了父类的方法,当你用子类对象调用fight的时候,就是调用子类自己这个重写后的方法。
@Override
public void fight() {
System.out.println("Student战斗!");
super关键字表示的就是父类的引用。所以打印内容参考person的fight()实现
super.fight();
}

@Override
public void say() {
System.out.println("Student说话!");
}

public static void main(String[] args) {
         这里你生命的是子类自己的对象,所以调用的也就是子类自己的方法。
           另外你可以吧Person定义成 public abstract interface Person class 然后你在试试。
         
Student student = new Student();
student.fight();
}

}

2013年5月11日 09:52

相关推荐

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

    这意味着当子类的对象调用该方法时,将调用子类中定义的方法,而不是父类中的方法。 重构的规则包括但不限于: - 子类方法的返回类型必须与父类方法的返回类型相同。 - 子类不能重构父类的`final`和`private`方法。...

    继承与多态,重载和重写

    在运行时,如果对象是子类类型,即使引用的是父类类型,也会调用子类中重写的方法,这就是多态性的一个体现。 例如,父类`Animal`有一个`sound()`方法,子类`Dog`和`Cat`都可以重写这个方法,分别发出狗叫声和猫...

    04JVM是如何执行方法调用的?(上)1

    重载指的是在同一个类中出现多个名字相同,并且参数类型不同的方法,而重写指的是子类定义了与父类中非私有方法同名的方法,并且这两个方法的参数类型相同。重载和重写都是多态的体现方式,但它们的使用场景不同。...

    java中重载与重写

    也就是说,子类可以提供一个新的方法实现来替换掉继承自父类的方法。重写的关键在于覆盖父类的行为,从而实现多态性。 #### 2. 特点 - **运行时确定**:重写是在运行时确定的,这意味着在运行时,程序会根据对象的...

    达内企业面试题集

    - 当通过父类引用调用子类重写的方法时,实际上执行的是子类方法的版本。 - 因此,在本例中,通过`baseObj.test()`调用的方法实际上是`Child`类中的`test`方法,输出结果为`Child.test()`。 ### 四、静态方法不能被...

    重载重写重定义测试代码

    在这段代码中,`print`函数被重载了两次,一次用于打印整数,一次用于打印浮点数。调用时,编译器会根据传入的参数类型自动选择合适的函数版本。 **2. 重写(Overriding)** 重写发生在继承关系中,子类对父类中...

    从虚拟机指令执行的角度分析JAVA中多态的实现原理.docx

    Java中的多态性是面向对象编程的一个核心特性,它允许我们使用父类引用指向子类对象,并调用子类特有的方法。多态的实现原理主要依赖于Java虚拟机(JVM)在运行时如何解析和执行方法。在这个过程中,方法的重载...

    java面试笔试题 选择题 问答题 带答案 300题+ 面试必须掌握的知识

    ` 这段代码实际上会调用子类Child的test()方法,因为baseObj引用的是Child对象。所以输出是D,即"Child.test()"。 4. 静态方法与实例方法: 静态方法不能被实例方法覆盖,因为它们不属于特定的对象实例。在题目中...

    Java重写重载线程

    在这段代码中,尽管两个`speak`方法的返回类型都是`void`,但由于它们的参数类型和顺序不同,因此能够成功实现重载。当尝试调用`speak(5, 5)`时,由于存在两种可能的方法匹配方式(即,将两个整型参数分别映射到第一...

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

    重写发生在子类与父类之间,子类可以提供一个与父类相同名称和参数列表的方法,但其方法体必须不同,或者访问权限更高。在 `B` 类中,它继承了 `A` 类,并重写了 `print(A a)` 和 `print(D d)` 方法。例如,当调用 ...

    Java复习提纲之面向对象.docx

    ` 这段代码在运行时,会调用 `Dog` 类中 `move` 方法的实现。 总之,Java面向对象的继承机制提供了代码复用和扩展的功能,使得程序设计更加灵活,但同时也需要注意过度依赖继承可能带来的耦合问题。理解并熟练掌握...

    jave 继承、封装、多态

    这就是所谓的“向上转型”,父类引用指向子类对象,能够调用子类的公共方法,体现了多态的特性。 在实际编程中,我们可以编写一个测试类来验证这些特性。例如: ```java public class Test { public static void ...

    实验指导20160418计算机软件及应用IT计算机专业资料.doc

    5. **方法重写与方法重载**:方法重写(Override)是指子类重新定义父类中的某个方法,保持相同的签名但可能有不同的实现。方法重载(Overload)则是指在同一类中可以有多个同名但参数列表不同的方法。方法重载不...

    C++函数的重载和覆盖

    在这段代码中,`print`函数被重载了两次,一次接受`int`类型的参数,一次接受`double`类型的参数。 ### 2. 函数的覆盖(Overriding) 函数覆盖发生在继承关系中,子类可以重新定义父类中声明的虚函数,以实现不同...

    java多态演讲PPT教案学习.pptx

    当子类覆盖了父类的方法,父类引用指向子类对象时,调用这个方法会根据运行时的对象类型决定执行子类的方法,而非父类的。这是Java中最常见的多态形式,体现了“一个接口,多种实现”的理念。例如,`Father`类有一个...

    Overloading&Overriding

    在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。 例如,以下是一个简单的重写...

    java中静态代码块与构造方法的执行顺序判断

    多态的实现基于方法的重写,使得父类引用能够调用子类特有的功能。 通过上述分析,我们可以清楚地理解Java中静态代码块与构造方法的执行顺序,这对于编写高效且可靠的代码至关重要。在实际编程中,了解这些基础知识...

    12_Java面向对象_第4天(构造方法、this、super)_讲义

    当一个类继承另一个类时,子类可以调用父类的构造方法来初始化父类的部分。子类的构造方法通常会首先调用父类的构造方法,然后执行自己的初始化操作。 通过深入理解和熟练运用构造方法、`this`和`super`,开发者...

    java开始面试的第14天.doc

    这样,当使用子类对象调用这个方法时,会执行子类的实现,即使通过父类引用调用也会运行子类版本。这是多态性的一个体现,增强了代码的扩展性和灵活性。 1.2 重写和重载的区别: - 重载(Overloading)发生在同一个...

    17_函数的重载

    3. **与方法覆盖的区别**:函数重载不涉及继承关系,而方法覆盖(Override)是发生在子类对父类方法的重新定义。重载只关注同名函数在同个类内的定义,而覆盖则发生在不同类之间。 4. **避免使用原始类型与包装类型...

Global site tag (gtag.js) - Google Analytics