father _son;
_son =  new son();
如果把father改成son就没问题,但是如果改了问题就大了。所以.....郁闷

解决方案 »

  1.   

    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){
    }
    }明显你的理解有问题
      

  2.   

    to bluesmile979(笑着) 
    难道我的子类种不能增加方法嘛``比如说我有n个字类,每个子类都有m个不同的方法。
    那么父类至少要定义 m*n+公共方法,要定义这么多???????那还要继承,抽象干嘛?极度郁闷````````
      

  3.   

    如果你要这么用
    father _son;
    _son =  new son();那就是必须的(当然可以有另外的解决方法,不过要使用reflect,比较的麻烦)那还要继承,抽象干嘛?编程多了你就会有感觉了,我觉得对这个理论讨论没什么意思。
      

  4.   

    或者:
    ((Son)_son).setTele(...);
      

  5.   

    你定义一个老子类的引用指向一个儿子类的实例,这本身没有问题,但问题是你的思想还是要老子(实际上是儿子)干什么事,编译器认为老子不知道怎么干,当然就发火了. 所以你要告诉编译器这实际上要儿子干什么事.bluesmile979的想法是如果你要这样写的话,就要在老子类中放好方法(不必实现). 或者就直接定义儿子类,让它直接干.
      

  6.   

    bluesmile979(笑着) 
    我想兄台理解错了吧...
    楼主的意思是一个抽象类
    下面有无数的子类来继承...
    但每个子类有不同的功能(也就是说有不同的方法了)
    而他们(了类)还是有共同的某些特征的...比如说有几个方法是共同的....
    要在客户端直接就能调用父类对象的子类方法,所以在父类中增加方法应该是不可行的..
      

  7.   

    to  helpall
    可是
    _son =  new son();
    这句话的意思是把形式老子类的_son用儿子来实例化,那么,这个_son必然是一个儿子类型的。那么它为什么不能调用自己的方法呢。
      

  8.   

    要分清编译时与运行时的区别,在编译时,_son 只是一个老子类的引用,编译器只到老子类中找所引用的方法.
      

  9.   

    你要做generic programming,就要做妥协,每个儿子特有的方法就不应该提,应该提大家共有的方法,而这些方法在老子类中声明一下是未尝不可的.如果一定要用儿子们特有的方法,并且不想在老子类中声明,那不如直接声明儿子类的变量去做.
      

  10.   

    father _son;
    _son =  new son();
    你没必要这么写呀!
    这样写出来还不是告诉编译器_son是个father?
    完全可以不用抽象类来写father,而且抽象类是无法实例化的!
      

  11.   

    我现在最郁闷的是为什么我用son()实例化_sun.可是_sun只提供father里声明的方法。c++的就不一样了````它比java聪明。
      

  12.   

    这个是因为你的引用是father类型的。他只知道他这种类型的函数接口,你要他使用子类的函数,他当然就不知道了。要不你把他强制转型为son类型,这个时候他就会知道子类的接口了,这样,才可以正常使用。
      

  13.   

    强制转型为son类型????????]
    father _son;
    _son =  new son();
    怎么转?
      

  14.   

    "我现在最郁闷的是为什么我用son()实例化_sun.可是_sun只提供father里声明的方法。c++的就不一样了````它比java聪明。"=========>好象你的理解还是不一样. _son可以提供任何方法,有没有在father中声明不是关键,但是如果你要用在father中没有声明的方法,你就要告诉编译器这是一个son类型的.我记得在C++中也应该是这样的,马上到办公室去验证一下再告诉你.
      

  15.   

    还好. 记得没错. 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;
    }