Java上转型变量调用子类重写的方法时,方法中调用的属性是被隐藏的还是子类重写的变量?

Python015

Java上转型变量调用子类重写的方法时,方法中调用的属性是被隐藏的还是子类重写的变量?,第1张

在 Java 中,当使用父类的引用变量调用子类的重写方法时,被调用的方法是子类重写的方法。这是因为在 Java 中,方法的调用是在运行时进行的,称为动态绑定,它允许在运行时根据对象的实际类型来调用方法。

举个例子,假设你有一个父类 Person 和一个子类 Student,其中父类有一个方法 getName,子类重写了该方法,如下所示:

class Person {

protected String name

public String getName() {

return name

}

}

class Student extends Person {

@Override

public String getName() {

return "Student: " + name

}

}

然后你可以这样使用父类的引用变量调用子类重写的方法:

Person person = new Student()

System.out.println(person.getName())

这将输出 "Student: [name]",因为调用的是子类重写的方法。

另外,在调用重写的方法时,方法中使用的属性也是子类重写的属性。例如,在上面的例子中,如果你在子类中重写了 name 属性,那么调用 getName 方法时将使用子类重写的 name 属性。

在 Java 中,如果一个子类重写了父类的方法,则可以使用父类的引用变量调用子类的重写方法。这种调用方法的机制被称为动态绑定,它允许在运行时根据对象的实际类型来调用方法。

你可以使用父类的引用变量来引用子类的对象,例如:

Person person = new Student()

在这个例子中,person 是一个 Person 类型的引用变量,但它实际上引用了一个 Student 类型的对象。当你使用这个引用变量调用方法时,将调用子类重写的方法,而不是父类中定义的方法。

例如,假设你有一个父类 Person 和一个子类 Student,其中父类有一个方法 getName,子类重写了该方法,如下所示:

class Person {

protected String name

public String getName() {

return name

}

}

class Student extends Person {

@Override

public String getName() {

return "Student: " + name

}

}

然后你可以这样使用父类的引用变量调用子类重写的方法:

Person person = new Student()

System.out.println(person.getName())

这将输出 "Student: [name]",因为调用的是子类重写的方法。

另外,在调用重写的方法时,方法中使用的属性也是子类重写的属性。例如,在上面的例子中

1.你需要调用的另一个类的变量.必须是全局变量.\x0d\x0a 2.User user = new User()\x0d\x0a 3.定义为public.通过user.name就可以拿到user类里面的name变量\x0d\x0a 4.定义为private 那么就必须在user类里面添加name变量的set,get方法,通过user.getName()方法拿到user里面的name变量\x0d\x0a5.方法还有好多种.......

如果另一个类的变量是静态变量,用 类名.变量名 调用\x0d\x0a如果是public的变量,先创建另一个类的对象,用 对象名.变量名 调用\x0d\x0a如果是private的变量,用set、get方法操作对象\x0d\x0a还可以利用反射机制操作变量