Java中,方法的重写、重载的区别,以及多态的实例
首先我们要明白什么是重写和重载
重写(override):子类方法覆盖了父类的方法。 (类与类之间继承的关系)
例:父类代码
public class Deng { public void QiDong(){ System.out.println("亮了"); } public void GuanBi(){ System.out.println("灭了"); } }
子类代码
public class DengPao extends Deng { public void QiDong(){ System.out.println("灯泡亮了"); } public void GuanBi(){ System.out.println("灯泡灭了"); } }
如上,子类中的方法覆盖了父类的方法
重载(overload):在一个类中,方法可以重名,方法中的参数不同或数量不同,就不会冲突,即为重载(发生在一个类中的)
public class Fu { protected String XingMing="小明"; public void Shuo(){ //函数名字一致,但是这个没有参数 System.out.println(this.XingMing+",你要好好学习"); } public void Shuo(String a){ //这个有参数 这样就形成了重载 this.XingMing=a; System.out.println(this.XingMing+",你要好好天天向上"); }
在main函数中,我们来调用
public class Test { public static void main(String[] args) { Fu fu=new Fu(); fu.Shuo(); fu.Shuo("小华"); }
最后的结果如下
多态:对象执行某个行为方法式表现出不同的形态。
多态分为两种:
动态多态,通过重写实现;
静态多态,通过重载实现;
动态多态一般通过父类的引用,指向子类的实例来实现。实例调用的时候,调的是子类的方法。
这句话怎么理解呢?
Deng dg=new DengGuan();
就是这样的一个例子
多态的例子
USB接口,插入鼠标和U盘,模拟提示运行,拔出模拟提示拔出
为了方便查看, 我把几段代码集合到了一起
package com.itnba.maya.usb; public class USB { //父类 public void QiDong(){ } public void TingZhi(){ } } public class UPan extends USB { //子类 public void QiDong(){ System.out.println("u盘启动了"); } public void TingZhi(){ System.out.println("u盘停止运行了"); } } public class ShuBiao extends USB { //子类 public void QiDong(){ System.out.println("鼠标驱动了"); } public void TingZhi(){ System.out.println("鼠标停止驱动"); } } public class DianNao { //统一参数类型 public void ChaRu(USB u){ u.QiDong(); } public void BaChu(USB u){ u.TingZhi(); } } public class Test { //测试 public static void main(String[] args) { DianNao n=new DianNao(); USB pan=new UPan(); USB shu=new ShuBiao(); n.ChaRu(pan); n.BaChu(pan); n.ChaRu(shu); n.BaChu(shu); } }
最后输出的结果
我们不是制造者,我们是代码搬运工