java中继承是如何实现的,当创建子类对象时,也就隐含创建了从父类继承过来的属性和方法的吗?
还有静态方法又有什么特殊的吗?大家能谈谈JAVA的继承机制那就更好了。

解决方案 »

  1.   

    看看 Thinking in JAVA 吧 里边讲的比较详细。
      

  2.   

    算了,我写点C代码吧,看得懂就看。struct Method
    {
    };struct Class
    {
        struct Class* superClass;
        Method** memberMethodArray;    
        Method** staticMethodArray;
    };
    struct Instance
    {
        struct Class* clazz;
    };Class Object;
    Class String;
    String->superClass = &Object;Instance a;
    a->clazz = &String;... ...
      

  3.   

    发现怎么都爱钻牛角尖啊。。学Java先学会概念,表老是追究那么深层次实现级别虚拟机的操作那个等吃透J2SE后当兴趣看看也不迟。
      

  4.   

    继承:定义一个模板,模板包括公有方法和属性,而它的子类只需要继承它,就拥有了父类的方法和属性,
    而不必重写相同的代码,然后可扩充自己的特殊功能,加入相应方法和属性继承父类的方法和属性,但私有方法和属性除外,extends关键字,子类只能继承一个父类
    还有就是接口(只声明方法,不实现,也声明final static 变量),用implements关键字实现接口,可以实现多个接口静态方法的特殊性在于调用机制不同,类名.方法名()就可调用
    普通调用机,new 类名().方法名就可调用
      

  5.   

    package p1;
    public class Protected1
    {
    static private Character c = 'a';
    static protected void show(){
    System.out.println('a');
    }
    }//这是子类
    package p2;
    import p1.*;class Protected2 extends Protected1//测试静态的protected方法
    {
    public static void show(){
    System.out.println(111);
    }
    public static void main(String...args){
    Protected1 p1 = new Protected1();
    Protected2 p2 = new Protected2();
    Protected1.show();//可以访问
    Protected2.show();//也可以访问
    p2.show();//可以
    p1.show();//当show()方法为static protected时就可以这么访问了,如果只是protected类型的就只能用子类对象去访问。
    //System.out.println(Protected2.c);私有的成员域无法继承
    show();
    p2.f(p2);//结果是a
    p2.f(p1);//结果还是a
    }
    public void f(Protected1 p){
    p.show();//说明了对于重写了静态方法没有实现多态,不管传进来的p是父类还是子类都会调用参数引用类型的静态方法。
    }//所以静态方法在编译时就已经确定了,在运行期不能动态确定调用哪个方法。
    }
    //此例子说明了,静态成员可以被继承,但不能重写(上面那个show方法不算是重写,只是从新定义了一个方法。静态方法是编译时就确定的,没有多态)。
      

  6.   

    你怎么把这发到帖子上来还要让大家给你详细解释下吗?
    以后有问题了先在群里问问,也就不用浪费你100分了,嘿嘿!
    package p1;
    public class Protected1
    {
    static private Character c = 'a';
    static protected void show(){
    System.out.println('a');
    }
    }//这是子类
    package p2;
    import p1.*;class Protected2 extends Protected1//测试静态的protected方法
    {
    public static void show(){
    System.out.println(111);
    }
    public static void main(String...args){
    Protected1 p1 = new Protected1();
    Protected2 p2 = new Protected2();
    Protected1.show();//可以访问
    Protected2.show();//也可以访问
    p2.show();//可以
    p1.show();//当show()方法为static protected时就可以这么访问了,如果只是protected类型的就只能用子类对象去访问。
    //System.out.println(Protected2.c);私有的成员域无法继承
    show();
    p2.f(p2);//结果是a
    p2.f(p1);//结果还是a
    }
    public void f(Protected1 p){
    p.show();//对于重写了静态方法没有实现多态,不管传进来的p是父类还是子类都会调用参数引用类型的静态方法。
    }//静态方法在编译时就已经确定了,在运行期不能动态确定调用哪个方法。
    }
      

  7.   

    静态方法和class榜定,非静态方法和object绑定
      

  8.   

    http://lin.wenye1985.blog.163.com/blog/static/786402182009112810133331/
    看看这个吧。
      

  9.   

    子类通过关键字extends来继承父类,继承之后子类便拥有父类的方法和属性,当然私有的除外。而静态方法是绑定类的,而普通的方法是需要实例化后的对象才能调用的。
      

  10.   

    java中继承是使用extends关键字,当子类继承父类时,也就继承了父类的属性和方法。在继承关系中要符合is-a的关系。
    静态方法可以被继承但是不能覆盖
        原因是这样的,静态方法跟其他非静态方法不一样的区别在于静态方法不用NEW一个实例就可以调用的,即它的调用是根据他的类型来判断的,所以我总结一句话就是:静态方法的继承和覆盖是跟着引用类型的,而非静态方法是跟着实例本身的。只要使用this关键字调用就可以了,如果子类继承父类的构造函数和方法,则使用supper关键子,如果父类提供的方法不能实现子类的需求,则子类可以重写父类方法(如果在子类中定义了一个方法,其名称、返回类型、参数列表都与父类中的某个方法的名称、返回类型、参数列表相同,就叫做方法重写),方法重载是方法名相同,参数列表不同(参数的个数,参数的类型不同,与返回值无关)。
      

  11.   

    静态方法和非静态方法的处理方式其实是一样的,在同一个命名空间中都只有一个方法,方法放在方法区,非静态方法只是比静态方法多一个this的参数而已。不要被java表面的语义所迷惑。对于java的继承机制,其实继承只是类的问题,跟对象没关系,在生产一个类的对象的时候,虚拟机会依次搜索继承树,为对象建立成员属性,即使是私有属性也会建立。
    而对于方法调用,其实就是直接用对象关联到类再调用方法的,任何方法都是如此,因为方法只有一个,前面说了,非静态方法只是比动态方法多了一个this参数而已。
      

  12.   

    某一个类中,包含另一个类中的所有属性和方法。 父类:含有共用的行为属性和方法。父类中的私有数据和方法不能被子类调用。子类可以定义与父类同名的变量,实现对父类方法的隐藏(也就是说,子类隐藏父类的成员变量只是使之不可见,父类的同名成员变量在子类对象中仍然占有自己独立的内存空间)。子类可以定义与父类同名的方法,实现对父类方法的覆盖(而子类方法对父类同名方法的覆盖将清除父类方法占用的内存,从而使父类方法在子类对象中不存在)。方法的覆盖与成员变量的隐藏的意义:将父类行为和状态改为自身的行为和状态,对外仍保持统一的接口和名字,不失继承性。对于static,需实例化本类的对象,可直接通过类名来调用此方法。静态的代码块:当Java虚拟机加载类时,就会执行该代码块。切记哦,在static中不能使用this和super关键字的。在静态方法中只能直接调用静态成员,不能直接访问非静态成员。不管new多少个对象,static变量在内存中只有一份。
      

  13.   

    sorry 是无需实例化 少打个字