1.在thingking in java 的第四版第六章中明确的说了,子类对象中封装了父类对象,
2."When you create an object of the derived class, it contains within it a subobject of the base class. This subobject is the same as if you had created an object of the base class by itself. It’s just that from the outside, the subobject of the base class is wrapped within the derived-class object."
这里说派生类拥有一个父类的亚对象(subobject),是指派生类的对象中的一部分与父类对象是相同的。这个亚对象不是一个实际的对象,是无法独立于派生类对象之外的。
3.子类在创建实例后,类初始化方法会调用父类的初始化方法(除了java.lang.Object类,因为java.lang.Object类没有父类),而这种调用会逐级追述,直到java.lang.Object的初始化方法。
这个地方是初始化方法,而不是构造方法,因为构造方法是相对于java源程序而言,而编译后的class文件是初始化方法即" <init>"方法,初始化方法由java源程序的三个部分组成的,一个部分是成员字段后的直接的初始化语句,例如private int i=0;,第二个部分是由初始化块组成,例如:public class Test{ { this.i=4; \\do something...... } }
第三个部分就是java源代码中的构造方法中的代码,java源代码中有几个构造方法,那么class文件中就有几个初始化方法,编译器会把第一部分与第二部分分别复制到每个初始化方法的前端,然后把初始化方法对应参数的构造方法的代码复制到相应初始化方法中
调用初始化方法并不会生成对象
想象你的父类是一个抽象类,那么抽象类又如何能够产生对象呢
(对象的创建就是根据在堆上有没有开辟实例域的数据空间)
相关推荐
在Java中,子类是父类的一个特例,这意味着任何子类对象都能被视为父类对象。例如,假设我们有一个`Animal`父类和一个`Dog`子类,那么`Dog`就是`Animal`的一种类型。当我们有以下代码: ```java Animal animal = ...
1. **直接访问**:如果子类的属性是public或protected的,那么在同一个包内的其他类或者子类自身,都可以直接通过子类对象来访问这些属性。 2. **super关键字**:在子类中,可以通过`super`关键字来访问父类的属性和...
在面向对象编程中,“父类引用指向子类对象”是一个重要的概念,尤其在Java等支持继承的语言中应用广泛。这一机制允许使用父类类型的引用变量来引用子类的对象,从而实现多态性。 #### 基本原理 在面向对象编程...
在Java编程语言中,"将子类引用赋给父类对象"是一种常见的多态性表现。这个过程被称为向上转型(Upcasting),它允许我们用父类引用指向子类实例,从而实现更通用的代码设计。然而,这并不意味着在转换过程中会丢失...
- 当创建子类对象时,子类的构造器会隐式调用父类的无参构造器。如果父类没有无参构造器,则必须在子类构造器中显式调用父类构造器,通常使用`super(参数列表);`。 - 如果子类中定义了与父类同名的成员变量,父类的...
在Java中,反射主要用于在运行时分析类和对象,包括访问私有成员、调用私有方法、创建动态代理等。在标题和描述中提到的知识点主要集中在如何通过反射获取类的所有属性和get方法,包括来自子类和父类的。下面将详细...
这在初始化子类时非常重要,因为子类可能会依赖于父类的一些状态或配置。 **1. `super`关键字的基本使用** - **访问父类属性**:可以在子类中使用`super`关键字来访问父类的属性。 - **调用父类方法**:`super`也...
Java 多态性详解 —— 父类引用子类对象 多态性是 Java 面向对象编程的三个特征之一,另外两个是封装和继承。多态性是指通过方法的重写、重载和动态连接来实现的。在 Java 中,多态性是为了解决单继承问题而引入的...
这是因为Java在创建子类对象时,会先确保父类的初始化工作完成。这个过程可以通过在子类构造器中使用`super(参数列表)`来显式调用父类构造器。 总结,`super`关键字在Java面向对象编程中起到了关键的作用,它帮助...
"浅谈java继承中是否创建父类对象" 在 Java 中,继承是一个非常重要的概念,它允许子类继承父类的属性和方法。但是,一个常见的问题是, Java 中的继承是否创建父类对象?在这篇文章中,我们将深入探讨这个问题,并...
首先,我们创建了一个子类对象和一个父类对象,其中stu指向子类对象,per指向父类对象。 接着执行per = stu.overRide();语句;stu先调用overRide()方法,方法体里创建了一个子类对象,并让临时变量stu指向该对象,...
这意味着,我们可以将父类对象赋值给子类引用变量,然后使用子类引用变量访问子类中的方法和变量。例如,在上面的代码中,我们使用了 `People` 类作为父类,然后创建了一个 `Chinese` 类作为子类。我们可以使用 `...
在Java编程语言中,继承是面向对象编程的一个关键特性,它允许一个类(子类)继承另一个类(父类)的属性和方法。这有助于实现代码重用,并且可以创建层次结构的类系统,使代码更加模块化。下面我们将深入探讨Java中...
在Java中,继承是面向对象编程的核心特征之一,它允许我们创建一个新类(子类)基于一个已经存在的类(父类或超类)的结构。这样可以复用现有类的代码,并可添加或覆盖特性来形成新的类。本文将通过具体的代码范例,...
- 静态初始化块在类加载时执行,而不是在对象创建时。这意味着无论创建多少个子类对象,静态初始化块只执行一次。父类的静态初始化块会先于子类的执行。 5. **实例初始化块**: - 实例初始化块在创建对象时执行,...
这个顺序可以通过“创建子类对象内存加载顺序.png”图更加直观地理解。图中可能会清晰地展示出每个阶段的内存分配和对象构造过程,帮助学习者形成视觉记忆,加深理解。 了解这些基础知识对于编写健壮的Java代码至关...
4. **多态性**:子类对象可以被视为父类对象,调用父类公共方法。 5. **重写**:子类可以覆盖父类的抽象方法和属性。 6. **子类属性与方法**:子类可以有自己的属性和方法,也可以调用父类方法。 7. **构造函数调用*...
在深入讨论如何操作父类之前,我们先简要回顾一下Java反射的基本概念: - **Class**: 每个类都有一个与之对应的`Class`对象,它是反射的基础。 - **Constructor**: 用于创建类的新实例。 - **Field**: 表示类的成员...