 interface用来声明接口
interface用来声明接口 1.只提供一些方法规约,不提供方法主体.  如:
1.只提供一些方法规约,不提供方法主体.  如: public interface IPerson
public interface IPerson {
{ void getName();//不包含方法主体
    void getName();//不包含方法主体 }
} 2.方法不能用public abstract等修饰,无字段变量,无构造函数。
2.方法不能用public abstract等修饰,无字段变量,无构造函数。 3.方法可包含参数。  如
3.方法可包含参数。  如   public interface IPerson
  public interface IPerson {
  { void getAge(string s);
    void getAge(string s); }
  }
 一个例子(例1):
  一个例子(例1): public interface IPerson
public interface IPerson {
{  IPerson();              //错误
   IPerson();              //错误 string name;            //错误
   string name;            //错误 public void getIDcard();//错误
   public void getIDcard();//错误
 void getName();         //right
   void getName();         //right void getAge(string s);  //right
   void getAge(string s);  //right }
}
 实现interface的类
实现interface的类 1.与继承类的格式一致,如 public class Chinese:IPerson{}
1.与继承类的格式一致,如 public class Chinese:IPerson{} 2.必须实现 interface 中的各个方法
2.必须实现 interface 中的各个方法
 例2,继承例1
   例2,继承例1 public class Chinese:IPerson
public class Chinese:IPerson {
{  public Chinese(){}                  //添加构造
   public Chinese(){}                  //添加构造 public void getName(){}          //实现getName()
   public void getName(){}          //实现getName() public void getAge(string s){} //实现getAge()
   public void getAge(string s){} //实现getAge() }
}
 abstract声明抽象类、抽象方法
abstract声明抽象类、抽象方法 1.抽象方法所在类必须为抽象类
1.抽象方法所在类必须为抽象类 2.抽象类不能直接实例化,必须由其派生类实现。
2.抽象类不能直接实例化,必须由其派生类实现。 3.抽象方法不包含方法主体,必须由派生类以override方式实现此方法,这点跟interface中的方法类似
3.抽象方法不包含方法主体,必须由派生类以override方式实现此方法,这点跟interface中的方法类似
 如
  如 public abstract class Book
public abstract class Book {
{ public Book()
  public Book() {
  {    }
  }
 public abstract void getPrice();      //抽象方法,不含主体
  public abstract void getPrice();      //抽象方法,不含主体 public virtual void getName()   //虚方法,可覆盖
  public virtual void getName()   //虚方法,可覆盖 {
  { Console.WriteLine("this is a test:virtual getName()");
      Console.WriteLine("this is a test:virtual getName()"); }
  } public virtual void getContent()   //虚方法,可覆盖
  public virtual void getContent()   //虚方法,可覆盖 {
  { Console.WriteLine("this is a test:virtual getContent()");
      Console.WriteLine("this is a test:virtual getContent()"); }
  } public void getDate()                           //一般方法,若在派生类中重写,须使用new关键字
  public void getDate()                           //一般方法,若在派生类中重写,须使用new关键字 {
  { Console.WriteLine("this is a test: void getDate()");
      Console.WriteLine("this is a test: void getDate()"); }
   } }
}
 public class JavaBook:Book
public class JavaBook:Book {
{ public override void getPrice()   //实现抽象方法,必须实现
      public override void getPrice()   //实现抽象方法,必须实现 {
      { Console.WriteLine("this is a test:JavaBook override abstract getPrice()");
           Console.WriteLine("this is a test:JavaBook override abstract getPrice()"); }
      } public override void getName()   //覆盖原方法,不是必须的
      public override void getName()   //覆盖原方法,不是必须的 {
      { Console.WriteLine("this is a test:JavaBook override virtual getName()");
           Console.WriteLine("this is a test:JavaBook override virtual getName()"); }
      } }
}
 测试如下:
 测试如下: public class test
public class test {
{ public test()
   public test() {
   { JavaBook jbook=new JavaBook();
    JavaBook jbook=new JavaBook(); jbook.getPrice();      //将调用JavaBook中getPrice()
         jbook.getPrice();      //将调用JavaBook中getPrice() jbook.getName();       //将调用JavaBook中getName()
         jbook.getName();       //将调用JavaBook中getName() jbook.getContent();    //将调用Book中getContent()
         jbook.getContent();    //将调用Book中getContent() jbook.getDate();       //将调用Book中getDate()
         jbook.getDate();       //将调用Book中getDate()
 }
    } public static void Main()
   public static void Main() {
   {
 test t=new test();
       test t=new test(); }
   } }
}
 virtual标记方法为虚方法
virtual标记方法为虚方法 1.可在派生类中以override覆盖此方法
1.可在派生类中以override覆盖此方法 2.不覆盖也可由对象调用
2.不覆盖也可由对象调用 3.无此标记的方法(也无其他标记),重写时需用new隐藏原方法
3.无此标记的方法(也无其他标记),重写时需用new隐藏原方法
 abstract 与virtual : 方法重写时都使用 override 关键字
abstract 与virtual : 方法重写时都使用 override 关键字 interface中的方法和abstract方法都要求实现,但是abstract方法没有要求一定要实现。
interface中的方法和abstract方法都要求实现,但是abstract方法没有要求一定要实现。 
                     
                    
                 
                    
                 


 
    
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号