class Father{
    static void print(){
         System.out.println ("in father   method");
     }
}
class Child extends Father{
    static void print(){
         System.out.println ("in child method");
     }
}class Test{
    public static void main (String[] args) {
         Father f =new Child();
         f.print();
     }
}
这个叫覆盖,我知道静态方法不能被重写,但是这种写法和重写一摸一样,覆盖和重写区别是什么?

解决方案 »

  1.   

    覆盖==重写 叫法不同罢了
    父类中有个print()方法,子类里面再一个print()方法,这样子类对父类方法的重写。
    重载是指在“一个类”中,你写了多个方法,他们的方法名相同,但是参数不同,这样算是重载。比如你在一个类中写了print()和print(String a)两个同名函数。 我也是才学没多久 不知道理解对不的啊
      

  2.   

    overLoad 是本类方法之间的
    override 是子类和父类之间的
    overLoad是在一个类里面有两个方法名相同参数不同的两个方法
    override是子类重写了父类的某个方法
      

  3.   

    晕哦
    覆盖和重写是同一个概念啊 
    我都记不太清楚了 楼主这么一问我又理解成了 C# 中的 new 关键字
    楼主要例子 我就写个吧public class Test {
    public static void main(String[] args) {
    A a = new B(); //父类引用,子类对象; 同名成员变量父类无法引用,static方法也是如此。
    System.out.println(a.i); //父类的变量
    System.out.println(((B) a).i); //恢复到子类的变量
    a.testMethod(); //调用子类方法,多态
    a.testStaticMethod(); //调用父类方法。
    ((B)a).testStaticMethod();//恢复到子类引用调用子类方法,如同上边调用变量一样。
    }
    }class A {
    public int i = 1;
    public void testMethod() {
    System.out.println("this is in A");
    }
    public static void testStaticMethod() {
    System.out.println("this is the static method in A");
    }
    }class B extends A {
    public int i = 2;
    public int j = 0;
    public void testMethod() {
    System.out.println("this is in B");
    }
    public static void testStaticMethod() {
    System.out.println("this is the static method in B");
    }
    }
      

  4.   

    再加点东西public class Test {
    public static void main(String[] args) {
    A a = new B(); //父类引用,子类对象; 同名成员变量父类无法引用,static方法也是如此。
    System.out.println(a.i); //父类的变量
    System.out.println(((B) a).i); //恢复到子类的变量
    //System.out.println(a.j); 无法调用,这个叫擦除 ,上边同名的 i 其实也是这个意思
    //当引用类型恢复成子类后 父类的 i 因为被子类的 i 给屏蔽掉了,类似于类中方法中变量与类成员同名时,类成员被屏蔽掉一样
    System.out.println(((B) a).j); //恢复
    a.testMethod(); //调用子类方法,多态
    a.testStaticMethod(); //调用父类方法。
    ((B)a).testStaticMethod();//恢复到子类引用调用子类方法,如同上边调用变量一样。
    }
    }class A {
    public int i = 1;
    public void testMethod() {
    System.out.println("this is in A");
    }
    public static void testStaticMethod() {
    System.out.println("this is the static method in A");
    }
    }class B extends A {
    public int i = 2;
    public int j = 0;
    public void testMethod() {
    System.out.println("this is in B");
    }
    public static void testStaticMethod() {
    System.out.println("this is the static method in B");
    }
    }
      

  5.   

    各位大哥,我不是出个伪命题,是SCJP上说覆盖和重写不一样才来问的
      

  6.   

    我自己看着也纳闷啊,是SCJP学习指南说 静态方法不能重写但是可以覆盖,我不出清楚这2者才问大家
      

  7.   

    class Father {
    static void print() {
    System.out.println("in father method");
    }
    }class Child extends Father {
    static void print() {
    System.out.println("in child method");
    }
    }class Test {
    public static void main(String[] args) {
    Father f = new Child();
    f.print();
    }
    }这个里边只涉及到  静态绑定问题吧没看到和重载有什么关系
      

  8.   

    我明白你的意思了  
    SCJP学习指南说  所说的 覆盖 应该就是指  静态绑定SCJP学习指南说  所说的 重写 就是指动态绑定
      

  9.   

    拿你这个例子来说
    你的这个例子 就是  静态绑定   不会重写父类方法  就是它所说的覆盖如果过 吧 static 换成pulibc 如下
    class Father {
    public void print() {
    System.out.println("in father method");
    }
    }class Child extends Father {
    public void print() {
    System.out.println("in child method");
    }
    }class Test {
    public static void main(String[] args) {
    Father f = new Child();
    f.print();
    }
    }就是重写  子类会重写父类 方法  在C#中专门有关键字  标示  是覆盖方法 还是重写方法
      

  10.   

    这个是重写 重写是在类的继承中体现出来的 子类重写父类的方法 
    而覆盖是在同一个类中拥有相同的方法名字 但是参数的个数和类型可能不同
    例如
    public class Test
    {
        public static void main(String args[])
        {
             int age=22;
             String name="123456";
             public void fun()
             {
                 System.out.prntln("第一个fun()方法");
             }
             public void fun(String name)
             {              System.out.println("第二个fun()方法"+name);//多了一个name参数
             }
             public void fun(String name,int age)
             {
                   System.out.println("第三个fun()方法"+name+" "+age);//多了两个参数         }
        }
    }
    但是重写的方法名字跟参数都是一样的 
    千万要记住两点区别
    1,覆盖是在同一个类中的 。重写是在子类中重写父类方法,是两个类
    2,覆盖中的方法名字相同 但参数的类型和个数不同 调用方法时是根据参数来查找的 跟参数的顺序有关 在调用处输入实参数的时候 也得照着形式参数的顺序来。在重写中 子类重写父类的方法时 其方法名和参数个数和类型都相同 
    如果有说的不对的地方多多指教
      

  11.   

    重载:同一个类中方法名相同,参数列表不同.即为重载(overloading);
    覆盖:是子类和超类中由同名的方法,且参数列表相同,子类中的方法覆盖超类中的方法.
      

  12.   

    我看的书是《21天学通java》,上面写“父类的静态方法可以被子类的静态方法覆盖”,静态方法不是明明不能被重写的么,如果覆盖==重写的话,那就不知道到底是书错了还是我的理解有问题了,我是菜鸟,求指导。
      

  13.   


    java中子类怎么隐藏父类的函数?。。