java面向对象的特性(多态)

一.多态

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();
	}
}

运行结果如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值