在java中有重写,重载,覆盖这些名词,重写就叫覆盖,这两个只是名称不同,这里就统一称作重写。
重载:在java的同一个类中,只针对于方法(类中的函数叫方法)而言的,它是指让同一个方法名可以来完成不同的工作,很多时候这些工作的功能基本相同,只是情况不同时,需要方法的返回值类型、参数列表中的参数个数、或参数类型不同,这个时候就用到重载了。
重写:在子类继承父类时,子类中新增的变量或者方法与父类中的变量或方法名称相同,变量的值或者方法功能进行了改写,就叫重写。重写分为变量重写和方法重写。
下面是一个重写的例子
package book;
public class Overload extends ClA{
public static void main(String[] args) {
// TODO Auto-generated method stub
Overload o = new Overload();
System.out.println(o.sum(1, 2, 3));
System.out.println(o.sum(1, 2));
}
public double sum(double a, double b, int c) {
return a + b + c;
}
}
class ClA{
public int sum(int a, int b) {
return a + b;
}
}
继承中的类型转换与重写方法的调用
先附上一段代码
package book;
public class Convert {
public static void main(String[] args) {
// TODO Auto-generated method stub
A a = new A();
B b = new B();
A c = new B(); //父类由子类创建
System.out.println(a.s);
System.out.println(b.s);
a.callMe();
b.callMe();
System.out.println();
System.out.println(c.s);
c.callMe();
System.out.println();
b = (B)c; //由子类创建的父类转换为子类
System.out.println(b.s);
b.callMe();
System.out.println();
a = b; //子类转换为父类
System.out.println(a.s);
a.callMe();
}
}
class A{
public String s = "class A";
public void callMe() {
System.out.println("AFunction");
}
}
class B extends A{
public String s = "class B"; //变量重写
public void callMe() { //方法重写
System.out.println("BFunction");
}
}
运行结果
继承中的类型转换
子类可以直接转换为父类类型;但父类类型要转换为子类的话,要满足两个条件,1.父类与子类要先建立联系,即父类是由子类创建的。2.要进行类型强制转换。
继承中对于重写的调用问题
变量重写:对于变量重写来说,调用这个变量的实例类型是父类类型就调用父类中的变量,是子类类型就调用子类中的变量。
方法重写:如果调用的方法在子类中有被重写,那么就看调用这个方法的实例是由谁创建的就调用谁的方法。对于子类的实例来说,如果子类重写了父类的方法,就调用重写的方法,否则,调用继承的方法。