重写、重载和重构

前言:

重载、重写和重构在之前就学习过,但到现在仍然不能准确的说出它们到底有什么区别,该怎么具体的应用,看来真是书到用时方恨少,这种状况是不是特别严重?真的该总结回顾了。

重写(override):

什么是重写:

子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写(重写的方法和父类的方法名称一定要相同,参数的类型、个数也要相同)。方法重写又称方法覆盖。

重写的规则:

1、必须在继承里(基类中的方法用virtual关键字来标识,然后在继承类中对该类进行重写(override),这样基类中的方法已经被重写了,已经失去了功能)。
2、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载。
3、重写的方法的返回值必须和被重写的方法的返回一致; 
4、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。 
5、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类; 
6、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。 
7、静态方法不能被重写为非静态的方法。

举例:

public class BaseClass
    {
        public void functionA()
        {
            Console.WriteLine("BaseFunctionA");
        }
        public virtual void functionB()
        {
            Console.WriteLine("BaseFunctionB");
        }
    }
   public class DerivedClass:BaseClass
    {
        public new void functionA()
        {
            Console.WriteLine("DerivedFunctionA");
        }
        public override void functionB()
        {
            Console.WriteLine("DerivedFuncttionB<span style="font-family: Arial, Helvetica, sans-serif;">");</span>
        }
    }
执行:
BaseClass baseFunction=new DerivedClass();
baseFunction.functionA();
baseFunction.functionB();
执行结果:
BaseFunctionA 
DerivedFunctionB 

重载(overload):

什么是重载:

简单说,重载就是函数或者方法有同样的名称,但是参数列表不相同,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法(发生在同一类中,方法名相同,参数列表()不同)

重载作用:

传递不同的参数实现相同的效果。
重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。

重载的规则:

1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参
类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);

 2、不能通过访问权限、返回类型、抛出的异常进行重载;
 3、方法的异常类型和数目不会对重载造成影响;

举例:

(借鉴)

class Student
{
	void say()
	{
		System.out.println("老师,劳累你了。。。");
	}
}
class Leader
{
	void say()
	{
		System.out.println("同志们,辛苦你们了。。。");
	}
}

class SayHello
{
	void greeting(Student stu)	//学生打招呼的方式
	{
		stu.say();
	}
	void greeting(Leader lea)	//领导打招呼的方式
	{
		lea.say();
	}
}

public final  class Maintest {

	public static void main(String[] args) {
		
		Student stu=new Student();
		Leader lea=new Leader();
		
		SayHello sh=new SayHello();
		sh.greeting(stu);
		sh.greeting(lea);
	}
}

重载与重写的区别:


重构:

重构(Refactoring)就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。

总结:

重写和重载有它们易混淆的地方,多多比较和分析会更好的掌握理解,至于重构尽管带着“重”字,其实也和重载、重写就没什么关系了,简单了解吧。

评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值