记Java的多态

重载和重写体现了Java的多态。

重载(overload)就是在同一个类中,方法名称相同,参数列表中的参数类型或个数不相同。

重写(override)发生在父子两个类中,方法名,参数列表完全相同,子类重写了父类方法。

重载重写对比
重载重写
发生在同一个类中。相同方法名,参数列表中参数的种类及数量不同。有继承关系,发生在父子类中
属于静态绑定属于动态绑定
发生在编译期发生在运行期
适用于所有方法final、static、private修饰的不能重写

 

 

 

 

 

 

 

public class Test {
  Parent p = new Child();
  System.out.println(p.name);
  p.echo();
  // p.echoAgain(); compile error
  p.say();
  Parent pp = new Parent();
  pp.say();
}

class Parent {
  public String name = "parent";
  public void echo() {
    System.out.println("parent echo.");
  }
  public static void say() {
    System.out.println("parent say");
  }
}

class Child extends Parent {
  public String name = "child";
  public void echo() {
    System.out.println("child echo.");
  }
  public void echoAgain() {
    System.out.println("child again...");
  }
  public static void say() {
    System.out.println("parent say");
  }
}

output:
parent
child echo.
parent say
parent say

 上述例子说明:

  1. 父类的引用指向子类,只能调用重写了父类的方法,如果子类中有父类中没有声明的方法,则默认是擦除的。
  2. 父类引用指向子类的实例,调用方法由子类实例决定,调用的成员属性由父类决定。因为动态绑定只对方法生效,属性属于静态绑定内容,也就是编译期间决定的。
  3. 如果父类中是private、static、final修饰的方法,则不会发生动态绑定,因为这些方法是不能被继承(重写)的,这些方法的绑定是发生在编译期间,也就是静态绑定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值