`
cantellow
  • 浏览: 847304 次
  • 性别: Icon_minigender_1
  • 来自: 草帽海贼团
社区版块
存档分类
最新评论

第五惑:初始化和动态绑定之间的小小冲突

    博客分类:
  • Java
 
阅读更多

今天骑车去都江堰了,很累很累,没准备好今天该发什么Tips,所以就找了以前的知识点,不算是充数,希望大家多多包涵。

首先上代码:

package cantellow.text13;

public class Test13
{

	/**
	 * @param args
	 * @author cantellow
	 */
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		new RoundGlyph(5);
	}

}

abstract class Glyph
{
	abstract void draw();
	Glyph()
	{
		draw();
	}
}

class RoundGlyph extends Glyph
{

	private int radius = 1;
	RoundGlyph(int r)
	{
		radius = r;
	}
	void draw()
	{
		System.out.println(radius);
	}
}

 输出:0

问题:为什么输出不是1而是0?

==================================================================

参考理解:

因为在基类Glyph构造器中调用的 void draw()其实是RoundGlyph对象调用的,它调用的不是Glyph的draw()方法而是调用的RoundGlyph的draw()方法,而RoundGlyph的draw()方法它是把radius输出,而在这个时候,radius还没初始化。它只是在之前分配对象空间时被置为0,所以输出的是0。

2
0
分享到:
评论

相关推荐

    动态加载dom结构后,swiper无法拖动点击下一页 item2页面 .zip

    总之,动态加载DOM结构与第三方库如Swiper的兼容性问题是前端开发中常见的挑战,需要仔细分析DOM变化、初始化过程以及事件绑定等多个方面来解决。通过理解这些概念并应用相应的解决方案,可以有效地克服此类问题,...

    c++第二章变量_c++变量课件_

    静态变量在程序执行期间只初始化一次,其值在函数调用之间保持。而动态变量(通常通过new运算符分配)在堆上创建,需要手动释放以防止内存泄漏。 7. const常量: 常量是不可改变的变量,一旦赋值后不能再次修改。...

    i2c源代码情景分析

    i2c_dev_init初始化此模块,i2cdev_attach_adapter允许用户空间程序绑定到特定的i2c适配器。 第7章:i2c框架提供的设备访问方法 i2cdev_open、i2cdev_ioctl和i2cdev_read等函数提供了设备文件的打开、控制和读取...

    Effective及Exceptional系列

    - 知识点十六:静态与动态绑定,理解两者之间的差异和应用场景。 5. 《More Effective C++中文版》: - 知识点十七:RAII(Resource Acquisition Is Initialization)原则,强调资源管理的正确方式。 - 知识点...

    C++编程思想C++编程思想

    3. **构造与析构**:C++中的构造函数用于初始化对象,析构函数则在对象生命周期结束时执行清理工作。了解何时自动调用这些函数及其作用至关重要。 4. **静态与动态绑定**:静态绑定(早期绑定)是编译时确定的,而...

    C++课程-高质量C++编程_课时_大纲

    - **2.1 数据类型与变量**:涵盖整型、浮点型、字符型、布尔型等,以及变量的声明和初始化。 - **2.2 运算符与表达式**:讲解算术、比较、逻辑、赋值、位运算符,以及运算符的优先级和结合性。 - **2.3 流程控制**:...

    [Effective.C.中文版].(Scott.Meyers).(中文版&第3版)

    7. **动态绑定与静态绑定**:C++支持两种绑定方式,静态绑定(编译时绑定)和动态绑定(运行时绑定)。理解两者的区别对于编写高效代码至关重要。 8. **异常处理**:异常处理是处理程序运行时错误的一种方法,...

    Effectivec++英文版

    1. **对象初始化与赋值**:书中强调了对象初始化和赋值之间的区别,尤其是在构造函数中使用`= default`和`= delete`关键字来控制默认行为。正确使用这些可以避免浅拷贝和深拷贝的问题,防止意外的数据共享。 2. **...

    vc++2008学习

    ##### 第5章:引入程序结构 - **函数基础**:函数的定义、调用,参数传递方式(值传递、引用传递)。 - **模块化编程**:如何将复杂问题分解成多个小函数来解决。 - **命名空间**:了解命名空间的作用和使用方法,...

    C++程序设计_谭浩强·清华大学

    数组是存储相同类型数据的一种数据结构,本章会讲述一维数组、多维数组的声明、初始化、访问和操作,以及数组与函数之间的关系,帮助读者理解如何在程序中有效地使用数组。 #### 第6章:指针 指针是C++中一个非常...

    Effective C++第三版(中文,英文)

    2. **静态与动态绑定**:C++支持静态绑定(编译时绑定)和动态绑定(运行时绑定),理解两者的区别对于编写高效且安全的代码至关重要。 3. **常量与引用**:常量引用能确保对象在传递过程中不被修改,同时避免了...

    第5章继承性、多态性和命名空间

    【第5章 继承性、多态性和命名空间】 在C#中,面向对象的编程涉及几个核心概念,其中包括继承性、多态性和命名空间。这些特性使得代码更加灵活,易于维护,同时增强了模块的复用性。 **1. 继承机制** 继承是面向...

    Java 基础 第2阶段:面向对象编程-尚硅谷学习笔记(含面试题) 2023年

    - 构造器用于初始化新创建的对象,名称与类名相同且无返回值。 - 构造器可以有参数,便于在创建对象时设置初始状态。 6. **抽象类与接口**: - **抽象类**:不能被实例化的类,通常包含抽象方法(无实现的方法)...

    C++学习书籍——effective c++ 3rd(中英文)

    探讨动态绑定和继承层次中的对象生命周期问题。 通过阅读《Effective C++》,程序员能够深入理解C++的精髓,避免常见的陷阱,并提升编程技能。无论是初学者还是经验丰富的开发者,都能从中受益。这本书的中英文双语...

    c++study(习题)

    - **变量声明与初始化**:如何正确声明和初始化变量。 - **函数定义与调用**:如何定义和调用函数,参数传递方式。 - **数组与字符串**:数组的声明和使用,字符串处理技巧。 - **学习要点:** - **变量的作用...

    Xamarin.IQKeyboardManager:IQKeyboardManager的绑定

    2. **初始化**:在AppDelegate.cs文件中初始化IQKeyboardManager,通常在FinishedLaunching方法中执行。 3. **配置**:可以设置各种选项,如是否启用自动滚动,工具栏的颜色等。 4. **使用**:在界面的...

    对Java的思考(Thinking in Java) Java入门 java与C++对比 深入浅出

    本章详细讲解了合成和继承的语法,初始化基类,以及如何在继承链中处理名字冲突。此外,讨论了选择合成还是继承的策略,protected的用法,以及递增开发和上溯造型的概念。 这本书是Java开发者的重要参考资料,它...

    Thinking in C++英文版 pdf

    3. **构造与析构函数**:C++中的构造函数用于初始化对象,而析构函数则在对象生命周期结束时执行,用于释放资源。书中详细讨论了这两者的使用和注意事项。 4. **静态与动态绑定**:C++支持静态绑定(编译时绑定)和...

Global site tag (gtag.js) - Google Analytics