多态性
多态性是指“多种形式”
它使用不同的实例而执行不同操作
多态包括方法重写(覆盖)和方法重载
方法重写(覆盖)
方法重写(覆盖):父类与子类中的同名方法
相同点:
方法名字相同
方法的参数个数、类型相同
方法的返回类型相同
不同点:
方法完成的功能不同
覆盖方法的调用原则
java运行时系统根据调用该方法的对象,来决定调用哪个方法。对子类的一个对象,如果子类覆盖了父类的方法,则运行时系统调用子类的方法;如果子类继承了父类的方法(未覆盖),则运行时系统调用父类的方法
方法覆盖时应遵循的原则
方法被覆盖后不能比原方法有更严格的访问权限
class CCircle { // 父类CCircle
protected double radius;
public CCircle(doubler) { // 父类的构造函数
radius=r;
}
publicvoid show() { // 父类里的show() 方法
System.out.println("radius="+radius);
}
}
class CCoin extends CCircle { // 子类CCoin
private int value;
public CCoin(doubler,intv) { //子类的构造函数
super(r);
value=v;
}
publicvoid show() { // 子类里的show() 方法
System.out.println("radius= "+radius+", value= "+value);
}
publicstaticvoid main(String args[]){
CCirclecircle = new CCircle(10);
circle.show();
CCoin coin=new CCoin(2.0,5);
coin.show();
}
}
方法重载
类中有多个具有相同名称的方法
方法具有不同的参数列表
方法重载:同一类中的同名方法
构造器重载:
publicName()
{
xin = "";
ming = "";
}
public Name(String xin,String ming)
{
this.xin = xin;
this.ming = ming;
}
运算符重载:“+”
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
inta = 10, b = 20;
System.out.println("Operator + =" + (a+b));
System.out.println("String + = " + a + b);
}
普通方法重载:
int max(inta,intb){
return (a>b) ? a : b;
}
double max(doublea,doubleb){
return (a>b) ? a : b;
}
如何区别被重载的方法
通过参数列表的参数个数或类型
返回类型不能作为区分依据
总结
方法重写(覆盖):
父类、子类中的同名方法
签名完全相同
完成的功能不同
方法重载:
同一类的同名方法
方法的名字相同
方法的参数不同