发现一个c++多态与java多态不同的地方
刚刚看到一篇文章提出c++多态与java多态不同的地方,基本意思如下:
请看C++代码:
class Base
{
public:
Base()
{
init();
}
virtual ~Base() {}
protected:
int value;
virtual void init()
{
value = 100;
}
};
class Derived : public Base
{
public:
Derived()
{
init();
}
protected:
void init()
{
cout << "value = " << value << endl;
// 做一些额外的初始化工作
}
};
int main(int argc, char* argv[])
{
Base* pb;
pb = new Derived();
delete pb;
return 0;
}
执行结果是
value = 100
再看java代码:
class Base
{
public Base()
{
init();
}
protected int value;
protected void init()
{
value = 100;
}
}
class Derived extends Base
{
public Derived()
{
init();
}
protected void init()
{
System.out.println("value = " + value);
// 做一些额外的初始化工作
}
}
public class Test
{
public static void main(String[] args)
{
Base base = new Derived();
}
}
执行结果是
value = 0
value = 0
在java中子类的init方法重写了父类的init方法,导致不能正确完成初始化。看到这里我思考了一下,由于子类重写了父类的同名函数,才导致本应该执行的函数没有执行,如果修改父类的初始化函数或者子类的初始化函数,使子类不会发生重写,是不是就不会发生上面的情况?或许即使是子类与父类,当涉及到各自的初始化的地方时就不应该使用多态性。
相关文档:
Java中的startsWith和endsWith方法,在filter的功能实现中很方便,PHP可以用strncmp()
实现startsWith,但是无法实现endsWith,有些人会用正则来实现,但大多数人都不喜欢正则表达式的操作。
这里我通过一个叫substr_compare的方法实现(同时他也能实现sta ......
现在我就给大家介绍一下final关键字相关的一些东西~~~
1,final数据
在Java中,向编译器告知一块数据是恒定不变的,这类常量必须是基本数据类型,并且以关键字final表示,在对这个常量进行定义的时候, ......
有很长一段时间没有写博客了。最近一年,收到不少交流邮件都是关于webservice,大部分都是素要webservice实例。
其实对webservice 了解不是很深,只是根据工作需要去接触,去学习。最近项目和其他一个.net项目需要做数据交互,交互方式就采用Webservice.
特将开发中遇到的问题总结并分享;
开发中遇到的问题有:
1)jav ......
看到园子的同僚们写的《跨平台》系列之后真的是热血沸腾,有些话不得不说,不能不说。我要揭掉Java这一层层美丽的“画皮”,让大家看看画皮之下是什么?我们看到的都是一些什么?我本人并不是一定得推荐大家用.NET平台,但是我就是看不管有些人误导初学者,向他们传导什么都 ......