可以为基类引用变量分配基类对象或派生类对象的地址。
真/假?
有人能告诉我一个这意味着什么的例子吗?我是Java的新手,正在尝试理解Java的语言特定术语。感谢。
我认为这方面的一个例子就是我在下面写的代码:
public class B extends A {
A a = new A();
A ab = new B();
}
class A {
}
我认为既然两个引用变量都是有效的语法(在Eclipse中),那么答案是正确的。
答案 0 :(得分:3)
可以为基类引用变量分配基类对象或派生类对象的地址。
真/假?
是的,因为所有派生类对象都是基类的实例,而不是相反的方式。
有人能告诉我一个这意味着什么的例子吗?我是Java的新手,正在尝试理解Java的语言特定术语。感谢。
首先,您需要知道什么是基类和派生类。
基类也称为父类或超类是由另一个扩展的类。一个简单的例子是Animal class
。
虽然子类从其超类扩展而来。例如,Lion class
。
我们知道所有的狮子都是动物。但并非所有动物都是狮子。 子类只是超类的一个子集。
因此,当我们有一个基类引用时,我们可以将派生类对象分配给它。
示例:强>
class Animal{
}
class Lion extends Animal{
}
Animal someAnimal = new Lion(); //because all lions are animals
然而,反过来却是不真实的。因此在Java中不可能也不允许:
Lion lion = new Animal(); //not allowed in Java.
答案 1 :(得分:1)
如果您有一个名为Parent
public class Parent {
// ...
}
和名为Child
public class Child extends Parent {
// ...
}
然后基类引用引用定义为Parent pObj
的任何变量(此处名称pObj
并不重要),基类对象是指创建为new Parent()
的对象,派生类对象是指创建为new Child()
的对象。
所以,以下
可以为基类引用变量分配基类对象或派生类对象的地址。
指的是像
这样的作业Parent pObj = new Child();
您可能会问这样做的好处是什么?它是多态性。子类可以覆盖超类方法来重新定义行为。这使pObj
引用对同一方法调用的响应方式不同,具体取决于pObj
是指向Parent()
还是Child()
对象。
您可能会发现抓住好处有点困难,但请看一下面向对象的编程。 多态和继承,您的理解会更好。
答案 2 :(得分:0)
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 中允许将派生类引用分配给基类引用。