覆盖和重写的区别?
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(); }}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"); }}
[解决办法]
再加点东西
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"); }}
[解决办法]
看见标题把我郁闷着了.覆盖....
[解决办法]
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,覆盖中的方法名字相同 但参数的类型和个数不同 调用方法时是根据参数来查找的 跟参数的顺序有关 在调用处输入实参数的时候 也得照着形式参数的顺序来。在重写中 子类重写父类的方法时 其方法名和参数个数和类型都相同
如果有说的不对的地方多多指教
[解决办法]
顶