MyException - 我的异常网
当前位置:我的异常网» J2SE » 覆盖跟重写的区别

覆盖跟重写的区别(2)

www.MyException.Cn  网友分享于:2013-12-24  浏览:21次

------解决方案--------------------
再加点东西
Java code

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");
    }
}

------解决方案--------------------
看见标题把我郁闷着了.覆盖....
------解决方案--------------------
Java code


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();
    }
}

------解决方案--------------------
我明白你的意思了
SCJP学习指南说 所说的 覆盖 应该就是指 静态绑定

SCJP学习指南说 所说的 重写 就是指动态绑定
------解决方案--------------------
本来就没联系的两个概念,
------解决方案--------------------
[Quote=引用:]
Java code

class Father{
static void print(){
System.out.println ( "in father method ");
}
}
class Child extends Father{
static void print(){
System.out.println……
[/Quote]


这个是重写 重写是在类的继承中体现出来的 子类重写父类的方法
而覆盖是在同一个类中拥有相同的方法名字 但是参数的个数和类型可能不同
例如
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,覆盖中的方法名字相同 但参数的类型和个数不同 调用方法时是根据参数来查找的 跟参数的顺序有关 在调用处输入实参数的时候 也得照着形式参数的顺序来。在重写中 子类重写父类的方法时 其方法名和参数个数和类型都相同
如果有说的不对的地方多多指教
------解决方案--------------------
探讨
重写有多态
覆盖没多态
方法调用时
重写方法决定于对象类型
覆盖的方法决定于引用类型

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有