java单例模式的类能否被继承,有单例模式 Singleton 涉及的一些防止类被继承的东西...

本文探讨了C#、Java和C++中防止类或方法被继承的修饰符,如C#的sealed、Java的final以及C++中通过特定方式实现的final效果。这些修饰符限制了类的继承性,保证了代码的封闭性和效率,但也可能影响代码的扩展性。理解并适当使用这些修饰符对于软件设计至关重要。
摘要由CSDN通过智能技术生成

c#中 :

-------------------------------

当对一个类应用 sealed修饰符时,此修饰符会阻止其他类从该类继承。

java中:

-------------------------------

好像 有个 final 修饰符:

下面是从网络上拷贝的:final方法

将方法声明为final,那就说明你已经知道这个方法提供的功能已经满足你要求,不需要进行扩展,并且也不允许任何从此类继承的类来覆写这个方法,但是继承仍然可以继承这个方法,也就是说可以直接使用。另外有一种被称为inline的机制,它会使你在调用final方法时,直接将方法主体插入到调用处,而不是进行例行的方法调用,例如保存断点,压栈等,这样可能会使你的程序效率有所提高,然而当你的方法主体非常庞大时,或你在多处调用此方法,那么你的调用主体代码便会迅速膨胀,可能反而会影响效率,所以你要慎用final进行方法定义。

final类

当你将final用于类身上时,你就需要仔细考虑,因为一个final类是无法被任何人继承的,那也就意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完美而不需要进行修改或扩展。对于final类中的成员,你可以定义其为final,也可以不是final。而对于方法,由于所属类为final的关系,自然也就成了final型的。你也可以明确的给final类中的方法加上一个final,但这显然没有意义。

c++中:

-------------------------------

好像没有专门的修饰符:

但网络好像有模拟实现 的final类:

69c5a8ac3fa60e0848d784a6dd461da6.png见C++View第一期:

实现final类(不允许被派生)namespacePrivate{classNonDerivableHelper

{

NonDerivableHelper() {}

friendclassNonDerivable;

};

}

#ifdef NDEBUG#define FINAL_CLASS

#else

#define FINAL_CLASS : private virtual Private::NonDerivableHelper

#endif

classNonDerivable FINAL_CLASS

{

...

};

实现的很漂亮。

69c5a8ac3fa60e0848d784a6dd461da6.png

原文:http://www.cnblogs.com/wainiwann/p/3612081.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值