public abstract class father { protected String name; public String getName(){ return name; } public void setName(String aname){ name = aname; } public void setTele(String atele){ } public long getCode(){ } public void setCode(long acode){ } }明显你的理解有问题
to bluesmile979(笑着) 难道我的子类种不能增加方法嘛``比如说我有n个字类,每个子类都有m个不同的方法。 那么父类至少要定义 m*n+公共方法,要定义这么多???????那还要继承,抽象干嘛?极度郁闷````````
如果你要这么用 father _son; _son = new son();那就是必须的(当然可以有另外的解决方法,不过要使用reflect,比较的麻烦)那还要继承,抽象干嘛?编程多了你就会有感觉了,我觉得对这个理论讨论没什么意思。
还好. 记得没错. C++与java对这点的处理是一样的. class F { public: virtual void say()=0; }; class S:public F { public: void say() { cout<<" I am the son."<<endl; } void go() { cout<<" I am going"<<endl; }};int _tmain(int argc, _TCHAR* argv[]) { std::cout<<"hello world"<<endl; F *_s = new S; _s->say(); // _s->go(); // error ((S *)_s)->go(); // OK return 0; }
protected String name;
public String getName(){
return name;
}
public void setName(String aname){
name = aname;
}
public void setTele(String atele){
}
public long getCode(){
}
public void setCode(long acode){
}
}明显你的理解有问题
难道我的子类种不能增加方法嘛``比如说我有n个字类,每个子类都有m个不同的方法。
那么父类至少要定义 m*n+公共方法,要定义这么多???????那还要继承,抽象干嘛?极度郁闷````````
father _son;
_son = new son();那就是必须的(当然可以有另外的解决方法,不过要使用reflect,比较的麻烦)那还要继承,抽象干嘛?编程多了你就会有感觉了,我觉得对这个理论讨论没什么意思。
((Son)_son).setTele(...);
我想兄台理解错了吧...
楼主的意思是一个抽象类
下面有无数的子类来继承...
但每个子类有不同的功能(也就是说有不同的方法了)
而他们(了类)还是有共同的某些特征的...比如说有几个方法是共同的....
要在客户端直接就能调用父类对象的子类方法,所以在父类中增加方法应该是不可行的..
可是
_son = new son();
这句话的意思是把形式老子类的_son用儿子来实例化,那么,这个_son必然是一个儿子类型的。那么它为什么不能调用自己的方法呢。
_son = new son();
你没必要这么写呀!
这样写出来还不是告诉编译器_son是个father?
完全可以不用抽象类来写father,而且抽象类是无法实例化的!
father _son;
_son = new son();
怎么转?
class F {
public:
virtual void say()=0;
};
class S:public F {
public:
void say() {
cout<<" I am the son."<<endl;
}
void go() {
cout<<" I am going"<<endl;
}};int _tmain(int argc, _TCHAR* argv[])
{ std::cout<<"hello world"<<endl;
F *_s = new S;
_s->say();
// _s->go(); // error
((S *)_s)->go(); // OK
return 0;
}