一.多态
Java中的多态实际上是Java中的动态绑定机制,通过多态机制能够极大的提高程序的可扩展性和可读性,便于程序的后期维修。
多态是指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,在编译时可以通过父类的引用指向子类对象,而在运行时,则通过父类所指向的子类对象,调用子类中重写父类的方法。
存在的三个必要条件
1.继承
2.重写
3.父类引用指向子类对象
多态的应用:
package com.test;
public class Figure {
public String name;
public void attack() {
}
public void run() {
System.out.println("在奔跑");
}
}
package com.test;
public class Warrior extends Figure{
public void attack() {
System.out.println(this.name+"正在进行物理攻击");
}
}
package com.test;
public class Master extends Figure{
public void attack() {
System.out.println(this.name+"正在进行魔法攻击");
}
}
package com.test;
public class Test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Figure f1=new Warrior();
f1.name="恶魔巫师";
f1.attack();
Figure f2=new Warrior();
f2.name="撼地神牛";
f2.attack();
}
}
二.重载与重写
(1)重载
方法的重载,是指一个类中的多个方法可以具有相同的方法名,但这些方法的参数必须不同,在执行时可以根据其参数个数与类型来判断要调用此方法是哪一种操作。
注意:1.同一个类中方法名相同,参数列表不同;
2.返回值类型不能用于区分方法的重载;
3.构造方法也可以实现方法的重载。
重载的应用:
package com.test;
public class Book {
public float getPrice() {
return 100;
}
public float getPrice(int page) {
return (float)(page*0.1);
}
public float getPrice(int page,float discount) {
return (float)(page*discount);
}
}
package com.test;
public class Test2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Book bk=new Book();
System.out.println("默认的价格是:"+bk.getPrice());
System.out.println("按图书页数计算价格是:"+bk.getPrice(600));
System.out.println("按图书页数和折扣计算价格是:"+bk.getPrice(600, 0.9f));
}
}
运行结果如下:
(2)重写
子类扩展了父类,子类是一个特殊的父类。子类以父类为基础,额外增加新的属性和方法。但有一种方法除外:子类需要重写父类。
注意:方法的重写要遵循“两同两小一大”的规则。
子类包含与父类同名的方法叫方法重写,也被称为方法覆盖。方法的覆盖使子类“隐藏”了父类中的方法,如果需要访问被子类覆盖的方法,则可使用super关键字指明调用父亲被覆盖的实例方法。
重写的应用:
package com.test;
public class Bird {
public void fly() {
System.out.println("我在蓝天白云间自由的飞翔");
}
}
package com.test;
public class Ostrich extends Bird{
public void fly() {
System.out.println("我只能在地上拍拍翅膀奔跑");
}
public void prey() {
super.fly();
System.out.println("执行捕食方法功能");
}
}
package com.test;
public class Test4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Ostrich os=new Ostrich();
os.fly();
os.prey();
}
}
运行结果如下: