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

	}

}

  

 最后输出的结果

 

posted @ 2016-12-29 00:14  赵天成123  阅读(396)  评论(0编辑  收藏  举报