家长班:
public class Parent {
public void run()
{
walk();
System.out.println("Parent run");
}
public void walk()
{
System.out.println("Parent walk");
}儿童班:
public class Child extends Parent {
public void run()
{
super.run();
System.out.println("child run");
}
public void walk()
{
super.walk();
System.out.println("child walk");
}
public class FirstJava {
public static void main(String[] a) {
Child c=new Child();
c.run();
}我的价格低于市盈率
父母步行
儿童步行
父运行
子跑
在这里,当我称步行()为儿童散步()。为什么不陪父母散步呢?在调用walk()时,它引用的对象是哪个?为什么?有人解释原因吗??为什么它同时调用子方法和父方法。
发布于 2020-06-14 08:14:23
在……里面
Child c=new Child();
c.run();要应用与c中值类型相对应的run,因为c值和运行都是在其子值上定义的,因此调用在子上定义的操作run为:
public void run()
{
super.run();
System.out.println("child run");
}super.run()应用与父类对应的操作,因为您调用的子类的父类是父类,并在其父类上定义了运行:
public void run()
{
walk();
System.out.println("Parent run");
}根据子实例的实际类型应用操作遍历,因此您可以调用:
public void walk()
{
super.walk();
System.out.println("child walk");
}像以前一样,因为调用父级操作的super:
public void walk()
{
System.out.println("Parent walk");
}打印父母走,然后你走回来,在孩子走,打印子走,然后回来在父运行打印父运行,然后回来在子运行打印子运行
编辑后
在这里,当我叫
()它是为了走路()的孩子。为什么不陪父母散步呢?在调用walk()时,它引用的对象是哪个?为什么?
正如我已经说过的,这是因为被调用的方法是由实例的真实类型确定的(在执行时),在这种情况下,实例是一个子实例,所以被调用的方法是在子上定义的遍历,而不是在父上定义的。当然,如果没有对儿童的步行进行定义,那么它将是对父母的定义。所有方法都应用于您在main中创建的唯一实例,并作为一个子实例。
当然,如果walk是类父类(例如静态的)的一种方法,而不是它的实例,那么在父类运行时更改all和walk()的方法就是父类的遍历。但是在您的代码中情况并非如此,因此实例的真正类型很重要。
还请注意,执行过程将同样修改main,使其具有:
public class FirstJava {
public static void main(String[] a) {
Parent c=new Child();
c.run();
}因为即使c被声明为父级,它的值也是一个子值
发布于 2020-06-15 06:21:34
如果重写其子方法中的父方法,子对象将始终使用重写版本。
https://stackoverflow.com/questions/62369889
复制相似问题