Java 类和对象之间的编码差异

Java 类和对象之间的编码差异,java,Java,我想到了这个论坛,同时寻求澄清一个问题 java文献中的语句。声明是, 当你调用一个objects方法时,Java会寻找它 对象类中的方法定义。如果没有 如果找到一个,它会将方法调用传递给类层次结构 直到找到方法定义。” 我的困惑源于试图理解目的 在为类编码时使用不同编码的推理,然后在 为一个对象编码 我认为编码差异是由于类在物理上是不同的 位于内存的不同部分,然后放置对象, 当程序加载到内存中时 类被加载到“数据”部分,而对象被加载 放入堆栈或堆中 回到Java文献中的语句 如果我试图调用一个

我想到了这个论坛,同时寻求澄清一个问题 java文献中的语句。声明是,

当你调用一个objects方法时,Java会寻找它 对象类中的方法定义。如果没有 如果找到一个,它会将方法调用传递给类层次结构 直到找到方法定义。”

我的困惑源于试图理解目的 在为类编码时使用不同编码的推理,然后在 为一个对象编码

我认为编码差异是由于类在物理上是不同的 位于内存的不同部分,然后放置对象, 当程序加载到内存中时

类被加载到“数据”部分,而对象被加载 放入堆栈或堆中

回到Java文献中的语句

如果我试图调用一个对象的方法,实例化的类,对象蓝图,该方法在其对象的堆栈或堆中

那么为什么Java会在数据部分的不同部分寻找对象的方法呢

当您调用对象方法时,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()); 
    } 
} 
  • 在这里,我创建的对象是“friend”,当我调用对象方法toString()时,它在BestFriend类中查找该方法定义。由于我实现了toString()方法,它将调用该方法
  • 如果我没有在我的BestFriend类中实现toString方法,它会将方法调用传递给Object类,java中的每个类都直接或间接地是Object类的子类。对象类包含toString()方法
  • 因此,它将方法调用传递给类层次结构,直到找到方法定义为止

首先,忘记“数据”部分,本次讨论的堆栈或堆;类定义之类的东西加载到内存中,对象存储在哪里,这与理解类和对象如何工作的概念并不相关。这些都是Java虚拟机的实现细节,与理解主要概念无关

类是创建对象的蓝图—它描述特定类型的对象的外观(这些对象具有哪些成员变量以及可以对这些对象调用哪些方法)

您引用的这句话解释了当您尝试调用对象上的方法时,Java将在何处查找。它将首先查看对象的类-例如,如果您有一个
String
对象(这是一个类
String
实例的对象),并且您在其上调用一个方法,Java将首先查看它是否能在类
String
本身中找到该方法

如果在那里找不到它,它将查找class
String
的超类,它恰好是class
java.lang.Object
。如果您试图调用的方法存在于此,那么Java将调用该方法


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

请参阅。您不需要“为对象编写代码”-所有Java代码都是类,对象都是这些类的实例。这句话不是关于内存,而是关于继承,如果一个类不包含名为super的方法,则将检查该类,依此类推。您要研究的术语:a)多态性,可能还有B)vtable(这是用于实际确定调用哪个方法的机制)提示:编写示例代码时,请遵循Java命名约定。应该是“最好的朋友”,而不是最好的朋友只不过是进入了某个时刻。贾斯珀,非常感谢你。知道我正在为一个对象的类编码的知识有很大帮助。在等待这篇帖子的帮助时,我正在尝试引用书中的另一个例子。这使得我更容易将注意力集中在继承和多态性上,而不是它是否是一个对象。