Java编程基础之重载和重构的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011466469/article/details/88802178

1、重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型不做重载依据。直接上三份代码演示:

public class OverLoadDemo1 {
	/**
	 * 参数的数量不同 参数的类型不同 参数的顺序不同
	 */
//	调整参数类型为int,调整高度
	public static void increaseSeetHight( int x){
		System.out.println("提高座椅高度为:"+x+"cm");
	}
	
	public static void increaseSeetHight( int x,boolean y){
		System.out.println("提高座椅高度为:"+x+"cm");
		if(y){
			System.out.println("已设置的高度已保存");
		}else{
			System.out.println("已设置的高度未保存");
		}
	}
	
	public static void main(String[] args) {

			increaseSeetHight(3);
			increaseSeetHight(2, true);
	}
}
public class OverLoadDemo2 {
	// 重载,参数数据类型不同

	// 调整参数类型为int,调整高度
	public static void increaseSeetHight(int x) {
		System.out.println("提高座椅高度为:" + x + "cm,"+"整数参数的方法");
	}

	public static void increaseSeetHight(String x) {
		System.out.println("提高座椅高度为:" + x + "cm,"+"字符串类型参数的方法");
	
	}

	public static void main(String[] args) {

		increaseSeetHight(3);
		increaseSeetHight("2");
	}

}
public class OverLoadDemo3 {
//参数数据类型的顺序不同
	// 调整参数类型为int,调整高度
	public static void increaseSeetHight(int x,boolean y) {
		System.out.println("提高座椅高度为:" + x + "cm");
		if(y){
			System.out.println("调整完毕");
		}else{
			System.out.println("无法调整");
		}
	}
	
	public static void increaseSeetHight(boolean y,int x) {
		System.out.println("提高座椅高度为:" + x + "cm"+"第二个方法");
		if(y){
			System.out.println("调整完毕");
		}else{
			System.out.println("无法调整");
		}
	}
	public static void main(String [] agrs){
		increaseSeetHight(false, 0);
		increaseSeetHight(0, true);
	}
}

tips:不能根据方法的返回值类型不一样来重载方法,关键看参数列表参数个数、类型、顺序。

2、重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

public class OverrideParent {
	
	public void engineStart(){
		System.out.println("如果不是父类创建父类的对象,则这个方法只能通过子类调用");
	}

	public void engineStart(String str) {
		// TODO Auto-generated method stub
		System.out.println("如果父类创建父类的对象,则这个方法能被父类的对象调用");
	}

}
public class OverrideSon extends OverrideParent {
	/**
	 * 重写的注意事项: 
	 * 1、子类在重写父类的方法,参数列表必须一模一样 
	 * 2、子类覆盖父类的方法,必须保证权限大于等于父类
	 * 3、pravite和final修饰的方法不能被覆盖 私有的方法只能在本类访问,final修饰的是成员变量,不能可能存在覆盖
	 * 4、static关键字,静态只能覆盖静态,或者被静态覆盖,静态方法属于类,不属于对象
	 * 
	 */
	// 用户继承父类
	@Override
	public void engineStart(String str) {
		// TODO Auto-generated method stub
		// super关键字调用父类的方法
		// super.engineStart("str");
		System.out.println("这是子类重写的方法,被调用的两种方式,1、子类创建子类的对象应用,2、父类类型创建子类的类型");
	}

	public void engineStart() {
		// super.engineStart();
		System.out.println("这是子类重写的方法,覆盖父类的方法,父类创建父类的对象不会调用子类方法");
	}

	public static void main(String[] args) {
		// 创建本类的对象,调用父类的方法,
		OverrideParent o = new OverrideParent();
		// 调用的方法名也是子类的
		o.engineStart("2");
		o.engineStart();

		// 子类new一个对象,调用子类的方法,调用的方法名还是子类的
		OverrideSon p = new OverrideSon();
		p.engineStart();

		// 多态:父类类型的应用 创建子类类型的对象,执行就是子类的方法
		OverrideParent op = new OverrideSon();
		op.engineStart("1");
	}
}

 

猜你喜欢

转载自blog.csdn.net/u011466469/article/details/88802178
今日推荐