在方法的使用过程中,重载,重写和隐藏是常用到的。下面着重介绍方法的这些使用。
1、重载
重载是方法名不变,参数列表(参数类型或个数)不同的方法体现。
注意:返回值可以相同也可以不同。当参数个数相同而参数类型不同的时候,可以考虑使用泛型,提高代码的复用性。
下面给出示例:
public class Func
{
// 1、显示给出默认的构造函数,这点与结构体不同,结构体的默认构造不能写,一直存在。
public Func()
{
}
// 2、带一个 int 类型参数的自定义构造
public Func(int a)
{
}
// 3、 与 2 不同,带一个 string 类型参数的自定义构造方法
public Func(string a)
{
}
// 4、与 2,3都不同,有两个参数
public Func(int a,int b)
{
}
// 注意下面这种情况,光是返回值不同不是方法重载,编译器也会报错,所以一定要参数列表不同
public int GetNum()
{
return 0;
}
public void GetNum(int a)
{
}
}
2、 重写
重写用于子类重写父类的方法(虚方法或是抽象方法),当使用子类的实例对象赋值给父类引用的时候,调用方法会调用子类重写之后的方法。
注意:重写必须遵守的规则
(1)、使用 Override 修饰,放在 类型声明的前面,只能重写虚方法(virtual)或抽象方法(abstract);
(2)、重写的方法除了方法体可以不同外,方法名,返回值,参数列表必须相同。
下面给出示例:
public class BaseClass
{
public virtual int GetNum()
{
return 0;
}
}
public class class1:BaseClass
{
// 父类的方法是虚方法时(virtual),子类可以不用重写父类的方法,重写需注意:
// 1、返回值必须相同 2、方法名必须相同 3、参数列表必须相同
public override int GetNum()
{
return 1;
}
}
public abstract class AbstractClass
{
// 抽象方法只能有声明,不能有实现(花括号{})
public abstract int GetNum();
}
public class class2:AbstractClass
{
// 父类是抽象类,则子类必须重写父类的抽象方法,重写的规则同上
public override int GetNum()
{
return 0;
}
}
// 调用重写方法
// 子类实例化的对象赋值给父类的引用
BaseClass myClass = new class1();
// 调用方法时,会调用子类重写后的方法
int a = myClass.GetNum(); // a = 1
// 抽象类不能实例化,可以用子类实例化的对象赋值给该类的引用
AbstractClass myClass1 = new class2();
int b = myClass1.GetNum(); // b = 0
3、隐藏
隐藏也是应用于父类和子类,当父类的方法不是虚方法或抽象方法时,子类可以隐藏父类的方法,丰富面向对象的多态性。
注意:
(1)、隐藏方法使用 new 关键字,在类型前面声明;
(2)、方法名和参数列表必须相同,返回值和方法体可以不同;
(3)、父类引用指向子类的实例对象时,调用方法会调用父类的方法,而不是子类的方法。
public class NewClass
{
public int GetMyNum()
{
return 0;
}
}
public class class3:NewClass
{
// 子类隐藏父类的方法时,使用 new 声明,返回值可以与父类方法不同,参数列表必须相同
public new string GetMyNum()
{
return "子类";
}
}
NewClass cc = new class3();
// 当我不关心或不清楚返回值的类型时,可以使用 var 声明类型,不过必须要初始化,否则编译器推断不出类型
var c = cc.GetMyNum(); // c = 0
今天的文章C#中方法重载_java中重载是什么意思「建议收藏」分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/58118.html