相关疑难解决方法(0)

为什么我们在Java中为子对象分配父引用?

我问的是一个非常简单的问题,但我对此感到困惑.

假设我有一个班级Parent:

public class Parent {

    int name;
}
Run Code Online (Sandbox Code Playgroud)

并有另一堂课Child.java:

public class Child extends Parent{

    int salary;
}
Run Code Online (Sandbox Code Playgroud)

最后是我的Main.java类

public class Main {

    public static void main(String[] args)
    {
        Parent parent = new Child();
        parent.name= "abcd";
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我做一个像儿童的对象

Child child = new Child():
Run Code Online (Sandbox Code Playgroud)

然后child对象可以访问这两个name and salary变量.

我的问题是:

Parent parent = new Child();
Run Code Online (Sandbox Code Playgroud)

name提供父类变量的访问权限.那么这条线的确切用途是什么?

 Parent parent = new Child();
Run Code Online (Sandbox Code Playgroud)

而且当它使用动态多态时,为什么在执行此操作后无法访问子类的变量

Parent parent = new Child();
Run Code Online (Sandbox Code Playgroud)

java oop inheritance casting upcasting

58
推荐指数
6
解决办法
10万
查看次数

21
推荐指数
7
解决办法
3万
查看次数

Java中运行时多态的示例?

运行时多态性与静态多态性有何不同?

这可以是运行时多态的一个例子吗?

public class X
{
    public void methodA() // Base class method
    {
        System.out.println ("hello, I'm methodA of class X");
    }
}

public class Y extends X
{
    public void methodA() // Derived Class method
    {
        System.out.println ("hello, I'm methodA of class Y");
    }
}
public class Z
{
   public static void main (String args []) {
       X obj1 = new X(); // Reference and object X
       X obj2 = new Y(); // X reference but Y object
       obj1.methodA(); …
Run Code Online (Sandbox Code Playgroud)

java polymorphism

5
推荐指数
1
解决办法
2万
查看次数

什么时候需要动态多态(与静态多态相比)?

我来自函数式语言(例如 Haskell),我非常喜欢使用类型类来实现多态,这也是实现临时重载的结构方法。

然而,最近我开始理解OOP对实际问题进行建模的方式,我很好奇为什么我们需要OOP 语言(例如 Java)中的动态多态性。根据我的经验,大多数函数调用可以在编译时解决,因为许多函数式语言不支持子类型

所以我的问题是,在什么样的情况下我们必须使用动态多态而不是编译时多态?我的猜测是:

  • 当我们使用拥有对象的子类型系统时,我们无法确定它的实际类型(例如,我们有一个包含许多不同类型对象的容器。但是,在这种情况下,为什么不尝试使用代数数据类型联合类型来对容器的元素类型进行建模? ?)。
  • 我们只有对象,我们不知道它的方法的真实名称,所以我们必须使用vptr表来帮助我们。

java oop polymorphism functional-programming dynamic-dispatch

3
推荐指数
1
解决办法
159
查看次数

如果类中没有保持类状态的变量,那么函数应该声明为静态函数?

我给出以下代码来说明我的问题:

class Abc
{
  public:
       void do_something() {};

};

class Def
{
 public:
      static void do_something() {};

};
Run Code Online (Sandbox Code Playgroud)

这两个类AbcDef没有变量来之类的状态.在这种情况下,哪种定义函数的do_something方式更好?将它作为静态函数更好吗?

c++

0
推荐指数
1
解决办法
107
查看次数