Java 基础 Class 参考变量

Java Base Class Reference Variable

基 class 引用变量可以分配基 class 对象或派生 class 对象的地址。

True/False?

任何人都可以举例说明这意味着什么吗?我是 Java 的新手,正在尝试理解 Java 的语言特定术语。谢谢

我认为这方面的一个例子就是我在下面编写的代码:

public class B extends A {
    A a = new A();
    A ab = new B();
}

class A {

}

我认为既然两个引用变量都是有效语法(在 Eclipse 中),那么答案是正确的。

A base class reference variable may be assigned the address of either a base class object or a derived class object.

True/False?

正确,因为所有派生的 class object 都是基础 class 的一个实例,但反之则不然。

Can anybody show me an example of what this means? I'm new to Java and am trying to understand language specific terms of Java. Thanks.

首先,你需要知道什么是基class和派生class。

Base class 也称为 parent class 或 super class 是由另一个扩展的 class。一个简单的例子是 Animal class.

虽然 child class 从它的超级 class 扩展。例如,Lion class.

我们知道所有的狮子都是动物。但并非所有动物本质上都是狮子。 subclass 只是 superclass.

的一个子集

因此,当我们有一个基 class 引用时,我们可以将派生 class object 分配给它。

示例:

class Animal{
    
}

class Lion extends Animal{

}


Animal someAnimal = new Lion(); //because all lions are animals

然而,事实并非如此。因此在 Java:

中不可能也不允许
Lion lion = new Animal(); //not allowed in Java.

如果你有一个名为 Parent

的超级class
public class Parent {
    // ...
}

和一个名为 Child

的 derived/subclass
public class Child extends Parent {
    // ...
}

然后一个基础class引用指的是定义为Parent pObj的任何变量(这里名称pObj并不重要), 基础class对象指的是创建为new Parent()的对象,派生的class对象指的是一个创建为 new Child().

所以,下面

A base class reference variable may be assigned the address of either a base class object or a derived class object.

指的是类似

的赋值
Parent pObj = new Child();

您可能会问这样做有什么好处?这是多态性。 subclass 可以 override superclass 方法来重新定义行为。这使得 pObj 引用根据 pObj 指向 Parent() 还是 Child() 对象对相同的方法调用做出不同的响应。

您可能会发现有点难以领会其中的好处,但请看一下面向对象编程,尤其是。 多态继承,你的理解会更好。

class Base {
}
 
class Derived extends Base {
}
 
class Main {
    public static void main(String[] args)
    {
        Base x = new Base();   // Correct
        Base y = new Derived(); // Correct
        Derived z = new Derived(); // Correct
    }
}

Java.

中允许将派生 class 引用分配给基础 class 引用