gpt4 book ai didi

java - 父类(super class)类型的对象无法访问子类的方法

转载 作者:行者123 更新时间:2023-12-02 11:50:24 25 4
gpt4 key购买 nike

    class A extends B
{
public static void main(String[] args)
{
B obj = new A();
obj.speak(); //error :the method speak() undefined for type B
}

public void speak()
{
System.out.println("in speak");
}
}

class B {
}

我是java初学者,我无法理解这一行B obj = new A();的含义。意思是。为什么A不能访问自己的方法。请详细解释如果类 A 正在实例化,那么为什么它的方法不可访问。

最佳答案

下面的语句B obj = new A();意味着两件事。

  1. obj 被声明为 B 类型的对象。

  2. objA 定义。

换句话说,您可以像使用任何其他 B 对象一样使用 obj。通过将其类型声明为 B,您可以限制编译器仅使用该透视图(以及 B 的父类(super class))。

那么使用 A 定义 obj 意味着什么?

使用A的构造函数构建obj将导致A的每个父类(super class)被构造(从第一个父类向下) ,并且每次定义方法时,它们都会覆盖由其父类(super class)定义的方法。

成员变量/静态字段只会隐藏父类(super class)的成员变量/静态字段,这意味着通过切换视角您可以访问不同的字段。然而,重要的是要记住,这些方法将始终是由定义它们的最后一个子类定义的方法。

代码示例

public class Example
{
public static void main(String[] args)
{
Animal animal = new Animal();
System.out.println(animal.name);
animal.makeSound();
Animal doggy = new Dog();
System.out.println(doggy.name);
doggy.makeSound();
}
}

public class Animal {
public String name;

public Animal() {
name = "NameLess";
}

public void makeSound() {
System.out.println("What am I?");
}
}

public class Dog extends Animal {

public Dog() {
name = "Goofy";
}

public void makeSound() {
System.out.println("woof woof!");
}
}

此示例的输出将是:

NameLess
What am I?
Goofy
woof woof!

关于java - 父类(super class)类型的对象无法访问子类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47915092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com