类和对象之间的编码差异

时间:2019-08-28 11:04:39

标签: java

我在寻求澄清的同时想到了这个论坛 Java文献中的声明。该语句是;

“当您调用对象方法时,Java会寻找该方法 对象类中的方法定义。如果没有 找到一个,它通过方法调用类的层次结构 直到找到方法定义。”

我的困惑源于试图了解目的 当为一个类编写代码时,编码的理由不同 为对象编码。

我认为编码差异是由于类别的物理原因 位于与对象放置位置不同的内存部分, 程序加载到内存中时。

该类被加载到“数据”部分,而对象被加载 进入堆栈或堆。

回到Java文献中的陈述。

如果我尝试调用对象的方法,实例化的类,对象蓝图,则该方法位于对象的堆栈中。

那么Java为什么要在数据部分的不同部分中寻找对象的方法?

2 个答案:

答案 0 :(得分:2)

  

当调用对象方法时,Java查找该方法定义   在对象的类中。如果找不到,则通过方法   调用类层次结构,直到找到方法定义

让我们通过一个例子来理解其含义。

考虑上课

class BestFriend { 
    String name; 
    int age; 

    BestFriend (String name, int age) 
    { 
        this.name = name; 
        this.age = age; 
    } 
public String toString() 
    { 
        return name + " " + age + " "; 
    } 
public static void main(String[] args) 
    { 
        BestFriend friend = new BestFriend ("Gulpreet Kaur", 21); 
        System.out.println(friend ); 
        System.out.println(friend.toString()); 
    } 
} 
  • 这里创建的对象是“朋友”,当我调用对象方法toString()时,它将在BestFriend类中查找该方法定义。由于我已经实现了toString()方法,因此它将调用该方法。
  • 如果我没有在BestFriend类中实现toString方法,它将方法调用传递给Object类。java中的每个类都直接或间接是Object类的子级。对象类包含toString()方法。
  • 因此,它通过方法调用类的层次结构,直到找到方法定义为止

答案 1 :(得分:0)

首先,请忽略本讨论的“数据”部分,堆栈或堆;将类定义之类的内容加载到内存中以及将对象存储在何处与理解类和对象如何工作的概念并不相关。这些是Java虚拟机的实现细节,与理解主要概念无关。

类是用于制造对象的蓝图-它描述特定类型的对象的外观(此类对象具有哪些成员变量以及可以对此类对象调用的方法)。

您引用的句子说明了当您尝试在对象上调用方法时Java的外观。它首先会在对象的类中查找-例如,如果您有一个String对象(该对象是类String的实例),并且您对其调用了一个方法,则Java首先看看它是否可以在类String本身中找到该方法。

如果在那里找不到它,它将研究类String的超类-恰好是类java.lang.Object。如果您要调用的方法在那里,则Java会调用该方法。

这里要解释的关键概念是inheritancepolymorphism-面向对象编程的概念。