构造器中调用动态绑定的方法

构造器中调用动态绑定的方法

若在构造器中调用动态绑定的方法,不会调用父类的方法,而是优先调用子类中覆盖的绑定方法。
如果此时在方法中使用成员变量可能会造成重大错误。
class Glyph {
    void draw() {
        System.out.println("G() in draw");
    }
    Glyph() {
        System.out.println("G() before draw");
        draw();
        System.out.println("G() after draw");
    }
}
class RoundGlyyph extends Glyph {
    int r = 1;
    RoundGlyyph(int r) {
        this.r = r;
        System.out.println("R(), r = "+r);
    }
    void draw() {
        System.out.println("R() in draw, r = "+r);
    }
}
public class extendTest {
    @Test
    void initExtendsTest() {
        new RoundGlyyph(5);
    }
}
此处在仅仅分配句柄时对象对应的存储空间为二进制全0。
而在父类Glyph构造器中调用了子类RoundGlyph的方法draw(),此时子类的成员对象还未初始化,得到的半径r为二进制全0,不是初始化的1,更不是构造器设置的5。

所以要注意构造器内能安全使用的方法在基础类中必须声明为final。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Python,可以通过不同的构造方法来创建对象。以下是几种常见的构造方法: 1. 默认构造方法(__init__): 默认构造方法是在创建对象时自动调用方法。它用于初始化对象的属性。例如: ```python class MyClass: def __init__(self, param1, param2): self.param1 = param1 self.param2 = param2 obj = MyClass(10, 'hello') ``` 2. 类方法(@classmethod): 类方法是在不创建对象的情况下使用类来调用方法。它通常用于创建备选的构造方法。类方法使用`@classmethod`装饰义,并且第一个参数是类本身(通常命名为`cls`)。例如: ```python class MyClass: def __init__(self, param1, param2): self.param1 = param1 self.param2 = param2 @classmethod def from_string(cls, string): # 从字符串创建对象 param1, param2 = string.split(',') return cls(param1, param2) obj = MyClass.from_string('10,hello') ``` 3. 静态方法(@staticmethod): 静态方法是不与类或对象方法,它在类义,但不传递任何参数。它通常用于实现与类相关的实用功能。静态方法使用`@staticmethod`装饰义。例如: ```python class MyClass: def __init__(self, param1, param2): self.param1 = param1 self.param2 = param2 @staticmethod def utility_func(): # 实用功能 pass MyClass.utility_func() ``` 这些是Python常用的不同构造方法的示例。根据你的需求,你可以选择适合的构造方法来创建对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值