class Program
    {
        static void Main(string[] args)
        {
            Base k = new Derived();这里能解释一下?
               //   k 里面没有子类的方法??
        }
    }  abstract class Base
    {
        public int l;        public Base()
        {
            Console.WriteLine("base");
        }        public abstract void tt();        public void kk()
        {
            Console.WriteLine("Base");
        }        public virtual void kkkk()
        {
            Console.WriteLine("Base virtual");
        }
    }    class Derived : Base
    {
        public Derived()
        {
            Console.WriteLine("Derivee");
        }        public override void tt()
        {
            l = 22;
            throw new NotImplementedException();
        }        public new void kkkk(){}        public void ggggggggggg()
        {
        }
    }

解决方案 »

  1.   

    http://msdn.microsoft.com/zh-cn/library/ms173152(VS.80).aspx
      

  2.   

     =================================================
     Base k = new Derived();这里能解释一下? 
                  //  k 里面没有子类的方法?? 
     =================================================楼主的意思是说你用k.下拉出的函数列表里找不到ggggggggggg()是么。

    我的理解是:你用Base k = new Derived();就表示k是一个类型为Base的对象引用,虽然在 赋值的时候被赋予了一个
    Derived类的引用,但是编译器是不会帮你做这个转换的,所以你是找不到的。多态是说对于同一个方法名,系统会根据对象引用的类型调用不同的方法。比如你定义个动物类,加上一个vitual的方法是“吼叫”,然后你继承一个类是“狗”。在狗类里重写这个函数,添加一些个性化的东西,然后你可以定义一个动物类的对象引用,给他赋值狗类的实例,这样你可以调用该变量.叫()方法,但是执行的是子类的实现方式,不知道这样说你明白没有。
      

  3.   

    Base k = new Derived();这里能解释一下? 
    //  k 里面没有子类的方法?? 
    --------
    你连继承都没搞清楚...所谓多态是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果...跟你的问题没有什么关系...
      

  4.   

    最经在BLOG刚写了介绍多态的,可以去看下
    http://blog.csdn.net/cc_net
      

  5.   


    没有继承和虚方法
    还谈什么多态从汇编级别说,对于一般非虚方法,在编译时就确定了调用方法的对象和方法地址.
    而多态是在编译时无法确定调用的对象,而使用call {对象方法表地址+方法槽偏移}来确定方法的地址每个对象都有自己的方法表,在运行时,方法隐藏传递一个this指针标识对象,也就确定了调用方法的对象.汇编级是不知道什么多态的
    从代码级来说,多态就是通过父类的变量,调用方法,单在运行时更具变量指向的实际对象类型决定调用那个方法
      

  6.   

    Base k = new Derived();这里能解释一下? 
    //  k 里面没有子类的方法??
    首先k被声明为Base类型,只拥有Base实例的方法,它不会拥有在Derived中有而在Base中没有的方法
    如果要使用Derived中的自定义的方法,必须声明成Derived实例.
    所谓多态就是
    类Derived继承自抽象类Base
    类OtherInstance继承自抽象类Base
    Base k = new Derived();
    Base another = new OtherInstance();
    当你调用k.tt方法时,会自动找到Derived的tt方法
    当你调用another.tt方法时,会自动找到OtherInstance的方法
    所以,同样是Base类的实例,但又有多种形态
      

  7.   


    子类对象可以当作父类来看
        Animal a=new Dog();
       创建一个狗对象,把它的值给了一个Animal的引用
        new Dog()是运行是类型,是客观的,是什么就是什么
        Animal a是一种引用类型,把对象当成什么看是主观的
      

  8.   

    以多态的形式来传递参数,增强了参数类型的灵活性
    假设有一个类Aclass,由它派生了一个子类Bclass,那么,我们可以将子类Bclass的对象赋给父类的变量:Aclass a=Bclass(),这就是多态。
    没有用多态
     public class CalClass(){
     .....
     public int calTeacherBirthYear(Teacher t){
     //根据参数t的年龄来计算教师的出生年代
    }
     public int calStudentBirthYear(Student s){
     //根据参数s的年龄来计算学生的出生年代

    }如果我们用多态的概念,我们只要定义一个方法来计算就可以了 .....
     public int calPersonBirthYear(Person p){
     //根据参数p的年龄来计算出生年代
    }
    如果需要计算某个学生的出生年代,只需要将这个学生对应的对象当作参数传递给这个方法,如果需要计算某个老师的出生年代,只需要将这个老师对应的对象当作参数传递给这个方法。
    在使用多态来传递参数的时候,有一个问题需要注意;一个对象只能有一种确切的数据类型,如果将一个变量声明为父类的引用类型,那么,即使它引用的对象是某个子类的对象,编译器也只是将这个对象 当作是父类型对象,因此若一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类添加的属性呵方法。
    比如:我们用Person(类)来声明一个变量,然后再将这个变量指向Teacher(类),这个时候,出不能用这个变量来调用子类Teacher特有的方法或属性了;Person p;
    p=new Teacher();
    p.setDepartment("数学教研室");
      

  9.   

    首先,多态是面向对象的三大特性之一。细说多态,实则非常的重要,在面向对象中的核心。举例说明
    接口 IPersonInfo 中定义一个方法叫 getName() ;就是说,抽象出了一个人,并且写出了一个方法,要得到人名。那么说,你的上下文中,也就是客户程序。。说白了就是调用处,就是片理这个人接口的地方
    public static void main( String[] args)
    {
        IPersonInfo per = new StudentPerson() ;
         per.getName() ;
    }
    在这里,我们有一个StudentPerson类是实现了接口的类,”学生是人“ 符合is a的关系。。
     IPersonInfo per = new StudentPerson() ;
    我们用父类的引用指向子类的实例。。这就是多态,也就是迟绑定,程序这样就可以扩展,封装有可能变化的点。
    不知道你明白否。
      

  10.   

    问题:{
                Base k = new Derived();这里能解释一下?
                  //  k 里面没有子类的方法??
            } 
    解答:
    变量k本为Derived类型,但此时其向上转型为Base类型。
    在编译时,java会找其对应Base类型中的方法调用,并不会调用Base中没有的方法。当调用父类Base的方法而子类Derived又重写(@Override)了其父类的方法时,那么在运行时,
    jvm中规定,自动调用子类中的方法。这一种现象就是多态。多态的好处是,通过父类中定义统一的方法,子类中用不同的方法实现。
    在调用时只需向上转型为父类,统一调用父类中的方法,即可在运行时执行对应子类中的方法,
    并不需要为不同的子类创建不同的调用方法。
    极大的方便了其调用和以后的修改。
      

  11.   

    我是新手,看了感觉,这个问题是一个继承的问题。   static void Main(string[] args) 
            { 
                Base k = new Derived();这里能解释一下? 
                  //  k 里面没有子类的方法?? 
            } 这里的就量k 的类型为Base(父类),new Derived()是实例化的一个子类对像。你把值传和了一个作为父类的变量k。也就是说k 同时有了父类与子类的所有公有属性和方法。但是,在继承里,子类继承父类,也就可以调用父类里的所有公有属性和方法,但是父类是不能调用子类里的自己的方法和属性。 所以你这里的k是父类的一个对象,它不能继承和调用子类特有属性和方法。
        你可以这样: Derived k=new Derived();/new Base();  这样k现在作为子类的一个对象,当然也就可以调用自己特有的属性和方法了。
      

  12.   

    多態就是polymorphism,呵呵
    簡單地說,多態就是對象可以表現出不同類的特性,例子樓上應有很多了
      

  13.   

    Base k = new Derived();这里能解释一下? 声明一个父类的变量,所有的调用在编译的时候都会以父类作为基础。子类的特殊方法不能通过编译器。而运行时,所有的通过了编译的方法,都会用子类的方法,也就是 Override的。
    这是编译期和运行期的区别
      

  14.   

    多态是OO中最关键的特性之一(GOF语)。GOF给的定义是:The ability to substitute objects of matching interface for one another at runtime。即,在运行时刻接口匹配的对象能互换的能力。在Wikipedia上则表述为...,polymorphism lets you treat derived class members just like there parent class's members。即,多态使得你可以向对待父类的成员那样对待派生类的成员。不够直观?In practical terms, polymorphism means that if class B inherits from class A, it doesn't have to inherit everything about class A; it can do some of the things that class A does differently。即,如果class B继承自class A,它不必从class A中继承所有的东西;对于某些方法,class B可以采用与class A不同的做法和实现。在Java语言机制中,多态表现为后绑定(或者叫动态绑定、晚期绑定),有两种形式:继承父类并重载父类中具有相同签名的方法;实现抽象父类(或接口)中具有相同签名的方法。当你对由父类声明的对象调用该方法时,对应的子类中的方法就会被调用。在OO思想中多态隐藏具体实现,使得客户端在不了解具体实现而只了解其接口的情况下可以访问对象的方法,这使得抽象成为可能。
      

  15.   

    很简单,同一函数名但参数不同
    如同一个类里面有方法
    int fish{
    }
    int fish(char x){
    }
      

  16.   

    多态:不同对象对同一消息作出不同的响应Java中有两种多态实现
    分别是:overwriting  & overloading
      

  17.   

    多态是指的不同的对象对相同的命令的不同操作...是根据自己具体的实际实现来实现不同的操作Base k = new Derived();这里能解释一下? 
                  //  k 里面没有子类的方法?? 这里的意思是指申明一个父类对象k引用的是子类对象Derived..
    如果父类里面的没有的方法是调不到的..是父类对象..不是子类..只是引用的子类对象而已如果子类重写了父类的方法..则调用用的时候实际调用的是子类的方法..因为父类的方法被子类给覆盖掉了...
    这样说可以明白么..
      

  18.   

     几个条件:
      1.要有extends
       2.要有,类型转换;看看think in java 第7章;
     
      

  19.   

    面向对象编程的一个核心要素
    面向对象编程风格有三个要素:多态,继承,封装 
        多态主要与虚函数有关,例如你在一个基类A中实现了一个虚函数Func(),在子类B中重写了这个虚函数,这时你将字类实例化,然后将这个子类对象隐式转化为一个基类A的对象,那么当你调用虚函数Func()时,你将自动调用子类实现的Func()函数。代码如下: public class A
    {
        public virtual void Func(){}
    }
    public class B
    {
        public override void Func(){}
    }//下面是Main()函数中的执行代码
    B b=new B();
    A a=new A();
    a.Func(); //此处调用的是B中Func()的实现多态很变态 有多种回答 
    实现方式 1,继承多态(C#单继承)2,接口多态(多继承)