c#,一个类可以同时继承自一个普通类和一个接口

一个类,可以继承自一个普通类,继承它的成员变量和方法;也可同时继承自 一个接口,继承接口的方法并完成定义。

using System;

namespace Interface
{
interface IAct{
	void Act();
              }
class Human {
	string name;
	float length;
	public Human(string n,float l)
		{
		name = n;
		length = l;
		}
	public void Describe()
		{
		Console.WriteLine("My name is {0},my length is {1}",name,length);
		}
			}
class Man:Human,IAct {//一个类,可以继承自一个普通类,也可同时继承自一个接口
	public Man(string n,float l):base(n,l)
		{ }
	public void Act()//对接口里的方法定义
		{
		Console.WriteLine("my limbs move and my mouth open and close");
		}
	 				  }

class Woman:Human,IAct{//一个类,可以继承自一个普通类,也可同时继承自一个接口
	public string characteristics;//在继承之外,也可再定义新成员
	public Woman(string n,float l):base(n,l)
		{
		characteristics = "My temperament is special";
		}
		public void Act()//对接口里的方法定义
		{
		Console.WriteLine("My limbs move and tooth tear");
		}
						}


class Program{
	public static void Main(string[] args)
		{
		IAct iA1,iA2;
		iA1 = new Man("gyg",171);
		iA2 = new Woman("gyy",165);
		iA1.Act();
		iA2.Act();
		Console.Write("Press any key to continue . . . ");
		Console.ReadKey(true);
		}
			  }
}

在上面的代码里面,不仅阐述清楚了一个类继承自普通类和接口的做法。还有一个神奇的魔法:同一种对象,都是IAct对象,调用同一种方法Act() 。但是执行的情况却完全不一样。


 了解了这个魔法的原理,就知道它其实是很合理的。

因为Man类和 Woman类都是继承自IAct类。那么一个Man或Woman对象自然也是一个IAct对象。因此将对象声明成IAct类型,但是赋给它的却是Man或者Woman对象,在后者,IAct中的方法已经个性化定义过了。因此,调用同一个方法,但是执行情况却不同

要注意的是,一个接口类对象,只能执行接口里的方法,即使返给它的是子类的对象。只要它的type是接口类,那么,它就只能执行接口里的方法。如果我有幸你读到这篇文章,你可以对已经赋了子类对象的接口类对象使用子类才有的方法,看编译器是如何报错的。谢谢

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值