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

空想家

我真的很想了解这些的实时用途是什么:

1. Java概念的用途是什么?“超类变量可以引用子类对象”?即使这样做,SuperClass变量也只能用于访问由SuperClass定义的对象的那些部分,而不能访问子类的成员。甚至可以通过子类对象来实现。

2.需要动态分配方法吗?我有一个例子如下:

class A
{
   void disp()
    {
      System.out.println("in A");
    }
}
class B extends A
{
    void disp()
    {
        System.out.println("in B");
    }
}
class C extends A
{
    void disp()
    {
        System.out.println("in C");
    }
}
public class mainclass
{
    public static void main(String[] args)
    {
        A a= new A();
        B b=new B();
        C c=new C();
        A ref;
        ref=b;
        ref.disp();//calls class B method
        ref=c;
        ref.disp();//calls class C method
        ref=a;
        ref.disp();//calls class A method
    }
}

上面的代码通过将不同的子类对象分配给超类引用变量来使用动态方法分派。我的问题是为什么要使用“ ref”并为其分配对象然后调用函数?即使不使用此“ ref”和对象分配(动态调度),我们也可以调用子类函数。

我们也可以这样称呼:

a.disp();//calls A method
b.disp();//calls B method and so on.
c.disp();

谁能帮助我理解这两个概念的实时使用?

提前致谢。

NINCOMPOOP

运行时多态是一种实现对接口进行编码的方法,而不是实现

多态性就像声明一个统一的接口,将实现细节留给实现接口的具体类型。这就像为所有实现该接口的人定义合同绑定一样。这使对象可以在不知道其确切类型的情况下彼此交互。

让我们假设您有一个方法(简单的例子):

public boolean remove(List list) {
   return list.remove();
}

由于已经定义了类型为Listinterface的参数,因此可以List在运行时接受任何实现的对象这样,您不必remove()为每个List实现编写单独的方法只要传递给此方法的对象实现即可List

另请阅读:

  1. Liskov替代原则
  2. 开闭原则

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

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

为什么在OO编程中用于强制转换对象的实例在变量中实例化超类和子类?

对超类对象的子类引用

指向超类对象的指针可以用作指向子类对象的指针。但是不能调用子类的成员函数。为什么?

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

具有超类和子类的Swift协议扩展方法分派

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

如果我使用超类来初始化子类对象,为什么该对象具有子类的属性,但是具有超类的方法呢?

超类和子类中几乎相同的方法发生冲突。为什么?

通过超类变量引用子类?

当对象是子类类型时,为什么我不能从超类调用子类中的公共方法?

有人可以解释为什么 R 为这个对象的超类而不是子类调度 S3 方法吗?

超类引用变量的子类对象访问子类的属性,而不是超级的的

为什么从子类的超类调用方法中获得“ this”?

为什么我的超类调用我的子类方法?

为什么代码执行超类'方法而不是子类'?

子类和超类方法

尽管子类对象调用该方法,为什么“ this”仍引用父类?

当对象不是动态分配的(不是指针)时,是否可以从超类对象转换为子类?

在调用超类的构造函数之前,有什么方法可以在Java中初始化子类的成员变量?

我可以通过Java中的超类引用访问子类对象的属性吗?

为什么不能将超类引用也转换为扩展了另一个超类的子类?

为什么不能引用子类对象引用父类对象?

超类方法获取子类变量

对子类对象的超类引用显示与对子类对象的子类引用相同的行为

引用父类对象的子类变量

超类类型对象的子类的构造方法?

为什么泛型超类型声明不允许引用子类型对象?

您可以使用超类的对象访问子类变量吗?