我问的是一个非常简单的问题,但我对此感到困惑.
假设我有一个班级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) 运行时多态性与静态多态性有何不同?
这可以是运行时多态的一个例子吗?
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) 我来自函数式语言(例如 Haskell),我非常喜欢使用类型类来实现多态,这也是实现临时重载的结构方法。
然而,最近我开始理解OOP对实际问题进行建模的方式,我很好奇为什么我们需要OOP 语言(例如 Java)中的动态多态性。根据我的经验,大多数函数调用可以在编译时解决,因为许多函数式语言不支持子类型。
所以我的问题是,在什么样的情况下我们必须使用动态多态而不是编译时多态?我的猜测是:
java oop polymorphism functional-programming dynamic-dispatch
我给出以下代码来说明我的问题:
class Abc
{
public:
void do_something() {};
};
class Def
{
public:
static void do_something() {};
};
Run Code Online (Sandbox Code Playgroud)
这两个类Abc和Def没有变量来之类的状态.在这种情况下,哪种定义函数的do_something方式更好?将它作为静态函数更好吗?