2021-06-15

第三章 继承与多态

3.3 Java中的多态

1 知识要点
多态的定义与使用
多态:字面上解释其实就是一个事物的多种形态。
Java中的方法,对象也都有多态的体现。
Java中的多态有两种体现,方法的重载和重写。
多态:同一个调用,作用于不同的对象,执行的功能不同。
println方法是JDK中自带的方法,用于向控制台输出信息,可以接收多种类型参数数据。
同一个调用执行的功能不同
System.out.println(123);
System.out.println(“123”);
System.out.println(true);
2.父类中的方法
将子类具体的方法抽离到父类中,父类无法确定功能实现,所以这里空着,后期有抽象的方法可以解决。
3. 父类引用指向子类对象
父类指代的范围更大,所以父类引用名可以指向具体的子类对象。
4. 注意事项
父类引用可以指向子类对象,但是不能用子类指用父类。

多态应用

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

}



在这里插入图片描述

3.4 Java中的重载和重写

  1. 方法重载是指在同一个类中同名不同参的方法,就是方法的名称相同,但是参数的个数和类型它不一样。
    2.方法的重载
    同一个类中,方法名相同,但是参数不同的方法称为方法的重载。
    3.注意事项
    这里的三个方法名虽然名称相同,但是参数不,第一个无参,第二个一个int参数,第三个两个参数,所以调用的时候可以通过具体的值类型进行区分。
    4.这样的方法和返回类型和修饰符是没有任何类型的。
    5.方法的重载是在同一个类的中,方法的重写则是在父类和子类这种父子关系中产生。
    6.方法的重写
    在子类中,对所继承父类中的方法进行重写,要求返回类型,方法名,参数列表都一致,且访问修饰符不能降低。
    7.重写和重载最大的区别就是重写是子类和父类之间发生的这种关系,而重载只是同一个父类中。
    8.知识要点
    重载和方法重写的区别:
    重载关注的是同一个类中方法名相同,参数不同的放法。调用的时候虽然方法名相同,但是根据的参数进行区分,从而执行不同的方法体。
    重写是发生在父类中,子类对父类方法的重新实现,要求方法返回值,方法名,方法参数都要相同,重写的方法访问修饰符要大于等于父类的方法的访问修饰符。
    9.多态除了体现在方法上之外,比如父类引用指向子类对象也属于多态的体现。

重载应用

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

}


在这里插入图片描述

重写的应用

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

}

在这里插入图片描述

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二十的十七

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值