1·属性定义:
抽象类中可声明字段,但接口不能有字段,不能有修饰符,比如public,private等。
2·方法的定义:
抽象类必须有抽象方法,也可有非抽象方法,在费抽象方法中可有具体实现代码。但是接口中只是空的方法体,没有具体实现。
public abstract class Animal
{
protected string a;//普通的数据成员,即字段的定义
public abstract void move();//抽象方法,子类继承时必须要实现的方法
public void eat()//非抽象方法,但是必须声明主体,主体可理解为下边大括号中的函数体。
{
Console.WriteLine("我是动物,我能吃饭");//非抽象方法中,方法的具体实现
}
}
public interface IAnimal
{
//private string a; //接口中不能定义字段。
void move(); //接口中的方法有且只有抽象方法,不用abstract修饰,
void eat(); //接口中不能有方法的具体实现。
}
3·继承关系:
抽象类和子类之间是继承关系,而类和接口是实现关系。一个类只能继承一个抽象类,但是一个类却可以实现多个接口。
接口不能继承抽象类或类,但抽象类可以继承抽象类和类,同时抽象类可以实现接口。
<pre name="code" class="html"> public abstract class Animal
{
protected string a;//普通的数据成员,即字段的定义
public abstract void move();//抽象方法,子类继承时必须要实现的方法
public void eat()//非抽象方法,但是必须声明主体,主体可理解为下边大括号中的函数体。
{
Console.WriteLine("我是动物,我能吃饭");//非抽象方法中,方法的具体实现
}
}
public interface IAnimal
{
//private string a; //接口中不能定义字段。
void move(); //接口中的方法有且只有抽象方法,不用abstract修饰,
void eat(); //接口中不能有方法的具体实现。
}
public interface IAnimal1
{
void sleep();
}
public class Dog : Animal
{
public override void move() //在继承抽象类时,要有override修饰符。
{
Console.WriteLine("我是狗,所以我可以跳");
Console.WriteLine(a);
}
}
public class Cat : IAnimal,IAnimal1 //Cat类可以实现两个接口
{
public void move() //实现接口的方法,不能加override修饰符。
{
Console.WriteLine("我是猫,所以我可以跑");
}
public void sleep()
{
Console.WriteLine("我要睡觉");
}
public void eat()
{
throw new NotImplementedException();
}
public class Pig : Animal, IAnimal1 //猪继承动物,并实现IAnimal1接口,其中Animal和IAniaml1之间用“,”分隔
{
public void sleep()
{
Console.WriteLine("我是猪,我可以躺着睡觉");
}
public override void move()
{
Console.WriteLine("我是猪,可以用四条腿走");
}
}
这仅仅是我个人的理解,有不合理地方,还望多多指教!