`
sun201200204
  • 浏览: 299982 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

多态方法在构造函数中的行为

    博客分类:
  • java
阅读更多
package com.payton.polymorphism;

abstract class Glyph {
    abstract void draw();
    Glyph(){
        System.out.println("Glyph() before draw()");
        draw();
        System.out.println("Glyph() after draw()");
    }
}

class RoundGlyph extends Glyph{
    private int radius = 1;
    RoundGlyph(int r){
        radius = r;
        System.out.println("RoundGlyph.RoundGlyph(), radius = "+ radius);
        
    }
    void draw() {
        System.out.println("RoundGlyph.draw(), radius = "+ radius);
    }
}

public class PolyConstructors {
    public static void main(String[] args) {
        new RoundGlyph(5);
    }

}

结果:
Glyph() before draw()
RoundGlyph.draw(), radius = 0
Glyph() after draw()
RoundGlyph.RoundGlyph(), radius = 5


执行顺序:
1、在进行其他工作之前,分配给该对象的内存会被初始化为二进制的0;
2、先调用基类的构造函数,这是会调用被覆写的draw()方法(在RoundGlyph实现),所以radius = 0
3、调用派生类的构造函数。
分享到:
评论

相关推荐

    C++构造和析构的多态

    然而,在构造函数和析构函数中调用虚函数时,多态的行为可能会有所不同。这是因为对象的构造和析构发生在对象生命周期的开始和结束阶段,而这些时刻虚函数表可能还没有被正确设置或已经被释放。本文将深入探讨这一...

    c/c++面试题(一些常出的面试题,包括多态,继承,函数参数等常考的内容)

    此外,面试官可能还会询问关于构造函数和析构函数的理解,如何使用虚析构函数处理多态对象的销毁,以及如何使用C++的模板、STL(标准模板库)、异常处理等高级特性。这些都要求面试者具备扎实的C++基础和实践经验。 ...

    C++有子对象的派生类的构造函数

    在C++编程语言中,构造函数是类的一个特殊成员函数,它的主要职责是初始化新创建的对象。当一个类含有子对象(即嵌套类或成员对象)时,这些子对象在派生类的实例化过程中也需要被正确地初始化。本篇文章将深入探讨...

    学学Python_42类的成员01 构造函数

    在Python中,构造函数被称为`__init__`方法。这个方法允许我们在创建对象时初始化对象的状态或设置初始值。 在`ClassElement1.py`文件中,我们可以假设它包含了一个类,该类可能定义了自己的构造函数来执行特定的...

    accp6.0-二期:构造函数教程

    无参构造函数通常用于提供默认的初始化行为,而带参构造函数允许我们在创建对象时传递参数,根据这些参数值对对象进行定制初始化。 ACCP6.0-二期课程中,我们不仅会学习到构造函数的基本语法,还会探讨如何使用构造...

    C++构造函数析构函数

    在给定的例子中,`jx(int a, int b)`就是矩形类`jx`的构造函数,它接受两个参数(矩形的宽和高),并分别赋值给类内的数据成员`x`和`y`。当创建`jx`类型的对象如`a(3,4)`时,这个构造函数会被自动调用,完成初始化...

    dotnet C# 多次对一个对象调用构造函数会发生什么.rar

    总的来说,多次对一个对象调用构造函数在C#中并不是常规做法,但了解其行为对于理解和调试代码至关重要。在编写代码时,应确保构造函数的设计能够正确地初始化对象,并避免不必要的重复初始化。同时,理解对象生命...

    java中的继承与多态

    在第二段代码中,`Student` 类的构造函数中缺少对父类构造函数的调用,应使用 `super(name)` 来初始化从 `Person` 类继承的 `name` 字段。 2. **多态**: 多态性是指一个接口可以有多种不同的表现形式或实现方式。...

    用一个示例来说明C#中的继承、封装和多态

    在C#编程语言中,继承、封装和多态是面向对象编程(OOP)的三大核心概念。这些特性使得代码更加灵活、可复用且易于维护。下面将通过一个具体的示例来阐述这三个概念。 首先,让我们理解一下这三个概念的基本含义: ...

    java 多态 经典讲解

    静态绑定发生在编译时,如构造函数调用和非虚方法调用。动态绑定则发生在运行时,当调用虚方法时,JVM会查找实际对象类型中的方法实现。这意味着,即使使用父类引用调用方法,实际执行的是子类中重写的方法。 #### ...

    多态和虚函数[参照].pdf

    4. 构造函数不能是虚函数,但析构函数可以,并且通常应该声明为虚函数。这样在删除基类指针指向的子类对象时,能够正确调用子类的析构函数,避免内存泄漏。 向上类型转换(upcasting)是指将子类对象的指针或引用...

    Java语言中的 覆盖重载和多态

    这主要体现在方法的多态和类型的多态上。例如,运算符 "+" 在不同的上下文中有不同的解释,如正数运算、加法运算和字符串连接,这就是多态的一个例子。在Java中,子类可以被视为其父类的一种类型,即子类对象可以...

    java 多态重载 PPT

    多态在Java中主要体现在方法的重载(Overloading)和覆盖(Overriding)上。 1. 多态(Polymorphism) 多态的概念指的是同一种行为可以有不同的表现形式。在Java中,多态主要通过继承和接口来实现。例如,`Person`...

    java继承和多态PPT教案学习.pptx

    在本文中,我们详细讨论了Java中继承和多态的基本概念,包括里式代换原则、方法重载、构造函数重载和方法覆盖等。通过掌握这些概念,我们可以在实际开发中更好地利用Java语言提供的工具,提高代码质量,加速开发过程...

    c++ 的封装继承多态例子

    同时,这些类可能会有私有数据成员,以及公有构造函数和访问器方法,体现封装特性。如果文件中还有其他类,可能是为了展示如何通过继承和多态构建复杂的类层次结构。 通过学习和实践这些例子,开发者能够更好地理解...

    多态和虚函数[收集].pdf

    4. 构造函数不能是虚函数,因为构造过程在对象创建时进行,此时多态性尚未建立。 5. 析构函数可以是虚函数,且通常推荐这样做,以确保在删除基类指针指向的对象时,能够正确调用子类的析构函数。 向上类型转换...

    【独家】【笔面试知识要点】16.OOP与OBP构造函数静态块1

    在Java中,构造函数是一个特殊的方法,用于初始化新创建的对象。它的主要目的是设置对象的初始状态,确保对象在使用前具备必要的属性值。默认构造函数是由Java编译器自动提供的,当用户没有定义任何构造函数时,...

    C++的构造函数总结

    如果需要在构造时设置特定值,应自定义构造函数,并在成员初始化列表中进行初始化。 拷贝构造函数则是用于创建新对象作为现有对象的副本。它在以下场景中被调用: 1. 对象作为另一个对象的初始值。 2. 作为函数...

    北大青鸟javaOOP多态Ch03作业全集.rar

    5. 构造器的多态:虽然构造器不能被继承,但是子类可以通过super关键字调用父类的构造器,实现不同子类在初始化阶段的不同行为。 6. 接口与多态:接口是实现多态的一种重要手段,它定义了一组方法,任何实现该接口...

    多态——纯虚函数与抽象类.zip

    在C++编程语言中,"多态"是一个核心概念,它允许不同的对象对同一消息做出不同的响应。...你需要理解这些概念,并在给定的主函数结构中,通过创建和管理对象来展示和分析多态行为,特别是虚析构函数的调用过程。

Global site tag (gtag.js) - Google Analytics