namespace 方法重写1
{
public class Employee //创建employee类
{
public string name; //定义类的属性
protected decimal basepay;
static decimal Man;
public Employee(string name, decimal basepay) //属性的声明,调用
{
this.name = name;
this.basepay = basepay;
}
public virtual decimal CalculatePay() //声明一个虚方法,以便於方法的重写 关键字:virtual
{
for (int i=1; i <= basepay;i++ )
{
Man += i;
}
return Man;
}
}
public class salesEmployee : Employee //创建一个子类salesEmployee
{
private decimal Min = 1; //定义子类的属性
public salesEmployee(String name, decimal basepay) : base(name, basepay) { } //声明继承父类的属性,
public override decimal CalculatePay() //重写父类的方法 关键字:override
{
for (int i = 1; i <= basepay; i++)
{
Min *= i;
}
return Min;
}
}
salesEmployee employee1 = new salesEmployee("Stad", 5);
Employee employee2 = new Employee("Hows", 50);
Employee employee0 = employee1;
报错是什么?
追问运行後就提示这个错误!
只能从子类转换为父类,而不能反过来!因为子类带有更多的信息!
追问显性转换也不行麼?那为什麼长整形能显性转换成整形呢?
long i = 1000;
int m ;
m = (int)i ;
为什麼这样却能转换呢?
有可比性么?那些是基本类型。你看到其他用户定义的类可以这样转?
追问呵呵 不好意思,我是初学者,对这里面的东西很多都不怎麼理解,而且这两天很少接触电脑,可以给我讲讲这是为什麼嘛?自定义的类和基本类型为什麼会有这麼大的区别呢?
追答不需要具体的编程知识,你就自己想想。销售员是员工,但员工不一定是销售员,员工再加上其他信息比如“销售产品”“销售区域”才能转换成销售员,而编译器是不知道从哪里获取这些信息的,所以无法转换。int和long就几个0的区别而已,是固定的,所以可以转换。