📜  Java中具有相同数据成员的父类和子类

📅  最后修改于: 2022-05-13 01:54:24.396000             🧑  作者: Mango

Java中具有相同数据成员的父类和子类

在 C++ 中,我们将所有类成员方法都视为非虚拟的。为了做到这一点,我们必须使用一个关键字作为前缀,称为虚拟。而在Java中,默认情况下我们将所有类成员方法都设为虚拟。为了使它们成为非虚拟的,我们使用关键字 final。

Java中的引用变量基本上是保存对象地址的十六进制类型的变量,后来转换为二进制系统,基本上是要存储在堆内存上的对象的地址。

与原始类型不同的引用变量,因为它们的大小无法计算。在Java中,Parent 类的引用变量能够保存它的对象引用以及它的子对象引用。让我们借助一个示例来了解非方法成员。

例子:

Java
// Java Program to Demonstrate that Non-method Members
// are Accessed according to Reference Type
// (Unlike methods that are accessed according
// to the referred object)
 
// Class 1
// Super class
class Parent {
    int value = 1000;
 
    // Constructor of super class
    Parent()
    {
 
        // Print statement
        System.out.println("Parent Constructor");
    }
}
 
// Class 2
// Sub class
class Child extends Parent {
 
    int value = 10;
 
    // Constructor of sub class
    Child()
    {
 
        // Print statement
        System.out.println("Child Constructor");
    }
}
 
// Class 3
// Main class
class GFG {
 
    // Main drvier method
    public static void main(String[] args)
    {
 
        // Creating an object of sub class inside main()
        // method
        Child obj = new Child();
 
        // Printing the reference of child type
        System.out.println("Reference of Child Type :"
                           + obj.value);
 
        // Note that doing "Parent par = new Child()"
        // would produce same result
        Parent par = obj;
 
        // Par holding obj will access the value
        // variable of parent class
 
        // Printing the reference of parent type
        System.out.println("Reference of Parent Type : "
                           + par.value);
    }
}


输出
Parent Constructor
Child Constructor
Reference of Child Type :10
Reference of Parent Type : 1000

输出解释:如果一个父引用变量持有子类的引用,并且我们在父类和子类中都有“value”变量,它将引用父类的“value”变量,无论它是否持有子类对象引用。持有子类对象引用的引用将无法访问子类的成员(函数或变量)。这是因为父引用变量只能访问父类中的字段。因此,引用变量的类型决定了将调用哪个版本的“值”,而不是被实例化的对象的类型。这是因为编译器仅对方法使用特殊的运行时多态机制。 (被实例化的对象的类型决定了要调用的方法的版本)。