Java方法重写与重载详解,代码举例

/*
    方法重写(方法覆盖/方法复写):
	           子类中出现了和父类中方法声明一模一样的方法
	方法重载:
	             本类中出现方法名一样,参数列表不同的方法。与返回值无关
				 
	方法重写的特点(上一个的已经举例):
              A:如果方法名不同,就调用对应的方法
              B:如果方法名相同,最终使用的时子类自己的		  
	子类对象的调用方法的时候:
          先找子类本身,再找父类	
				 
	方法重写的应用:
          当子类需要父类的功能,而功能主题子类有自己特有内容时,可以重写父类中的方法
          这样,即沿袭了父类的功能,又定义了子类特有的内容

		  
	案例:			 
		   A:定义一个手机类
		   B:通过研究,我发明了一个新手机,这个手机的作用是在打完电话后,可以听天气预报。
		   按照我们基本的设计,我们把代码给写出来了。
		   但是呢?我们又发现新手机应该是手机,所以,它应该继承自手机。
		   其实这个时候的设计,并不是最好的。
		   因为手机打电话功能,是手机本身就具备的最基本的功能。
		   所以,我的新手机是不用在提供这个功能的。
		   但是,这个时候,打电话功能就没有了。这个不好。
		   最终,还是加上这个功能。由于它继承了手机类,所以,我们就直接使用父类的功能即可。
		   那么,如何使用父类的功能呢?通过super关键字调用
*/
class Phone {
	public void call(String name) {
		System.out.println("给"+name+"打电话");
	}
}
class NewPhone extends Phone {
	public void call(String name) {
		//System.out.println("给"+name+"打电话");
		super.call(name);
		System.out.println("可以听天气预报了");
	}
}
class Demo9 {
	public static void main(String[] args) {
		NewPhone np = new NewPhone();
		np.call("林青霞");
	}
}		   

/*
   方法重写的注意事项
          A:父类中的私有方法不能被重写
		      因为父类私有方法子类根本就无法继承,更不可能重写
		  B:子类重写父类方法时,访问权限不能更低
              意思:子类的访问权限一定要大于等于父类的访问权限
                     最好一致			  
		  C:父类静态方法,子类也必须通过静态方法进行重写		  
			  其实这个算不上方法重写,但时现象确实如此,至于为什么在多态中讲
			  
			子类重写父类方法的时候,最好声明一模一样  
*/
class Father{
	public void show(){
		System.out.println("show Father");
	}
	
	public static void methon(){
		System.out.println("show Father");
	}
}
class Son extends Father{
	 /*
	 void show(){
		System.out.println("show Son");//无法编译 子类的权限低于父类
	}
	*/
	public void show(){
		System.out.println("show Son");
	}
	/*
	public  void methon(){
		System.out.println("show Father");//无法编译 父类是静态 子类不是静态无法覆盖
	}
	*/
}
class Dome{
	public static void main(String[] args){
		//创建对象
		Son s = new s Son();
		s.show();
	}
}

/*
    方法重写(方法覆盖/方法复写):
	           子类中出现了和父类中方法声明一模一样的方法
	方法重载:
	             本类中出现方法名一样,参数列表不同的方法。与返回值无关
				 
	方法重载能改变返回值类型,因为它和返回值类型无关			 
				 
	Override:方法重写 
    Overload:方法重载	
	
	this关键字和super关键字分别代表什么?以及他们各自的使用场景和作用
	
	   this:代表当前类的对象引用
	   super:代表父类存储空间的标识(可以理解为父类的引用,通过这个东西可以访问父类的成员)
	   
	 引用场景:  
	    成员变量:
	         this.成员变量
	         super.成员变量
	    构造方法:
              this(...)
              super(...)
        成员方法:
              this.成员方法
              super.成员方法
*/

你可能感兴趣的:(Java方法重写与重载详解,代码举例)