使用子类和超类引用访问实例方法

安库·阿加瓦尔(Ankur Agarwal):

这是示例代码:

package com.ankur.javapractice;
public class SuperClass {

    public void someMethod(int val) {
        System.out.println("Public method in SuperClass");
    }
}

class SubClass extends SuperClass {

    public void someMethod() {
        System.out.println("Public method in SubClass");
    }

    public static void main(String[] args) throws InterruptedException {
        SuperClass superClassRef = new SubClass();
        SubClass subClassRef = new SubClass();
        //superClassRef.someMethod(); // (1)
        subClassRef.someMethod(8); // (2)
    }
}

我知道为什么(1)在编译时不起作用(这就是为什么我将其注释掉了)。它不起作用someMethod()superClassRef因为它是类型的SuperClassSuperClass并且没有定义,因此不为人知someMethod()

我的问题是(2)在编译时为何/如何工作?使用相同的解释如上述,在编译时someMethod(int)也没有已知的subClassRef,因为它是类型的SubClassSubClass没有定义someMethod(int)

编辑和更新:

一些答案指出SubClass继承someMethod(int)SuperClass没错,我理解;我对此的后续问题是,编译器如何考虑继承关系?

朱利安诺·帕切科(Juliano Pacheco):

这是因为SubClass继承了someMethod(int)并具有someMethod(),因此它具有两种不同的方法。SuperClass无法访问someMethod(),因为它没有扩展任何类。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用超类的实例访问子类的覆盖变量

超类和子类——方法使用

当引用为超类类型时,子类无法访问超类的受保护方法

子类和超类方法

如何使超类方法返回子类的实例

为什么我们不能使用超类的引用变量来访问其子类的方法(超类中没有的方法)?

对子类实例使用超类类型

从超类 C# 访问子类方法

使用子类对象访问超类函数

如何使用C#通过超类的引用访问子类变量

在子类的方法中本地调用超类方法时,使用“ super”关键字还是使用超类实例?

我可以使用超类的类工厂静态方法创建子类实例吗?

通过超类实例调用子类类的方法

子类和超类

为什么动态方法分派和超类变量可以引用子类对象?

将子类转换为其超类,但仍能够使用子类的方法和属性

对超类对象的子类引用

Java:如何使用超类的静态方法从其创建子类的实例

Python-如何从子类实例调用超类的方法?

实例化子类时从超类调用方法

在调用方法时获取扩展超类的子类实例

使用超类引用创建对象和使用子类引用创建对象之间有什么区别?

确定用于调用子类中的方法的超类引用

超类引用无法在Java中调用子类方法

如何在Groovy中从静态超类方法引用子类

如何使用超类的构造函数创建子类的实例

如何使用超类构造函数创建子类的实例?

使用JAXB将子类实例作为超类传递

在子类实例化中使用替代超类构造函数