微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于继承和多态性的实例代码

本人学Asp.Net不久,用的是C#写代码,在学习C#中发现很多初学者对继承和多态性不是特别的了解,因此作了这个例子,希望对您有所帮助,例子很简单

页面文件TestProfileClass2.aspx

<%@ Page Language=C# ContentType=text/html ResponseEncoding=gb2312 Src=profile2.cs %>
<%@ Import Namespace=shai %>
<html>
<head>
<style>
p{font:Arial, Helvetica, sans-serif;
background-color
:#cccccc;
border-color
:black;
border-width
:1;
border-style
:solid;
padding:10,10,10,10;
}
</style>
<script language=c# runat=server>
public void Page_Load(Object sender,EventArgs e)
{
  Profile profile = new Profile();
  message.InnerHtml += <u>Profile Class</u><br>;
  message.InnerHtml += Firstname:+profile.getFirstname()+<br>;
  message.InnerHtml += Lastname:+profile.getLastname()+<br>;
  message.InnerHtml += Phone:+profile.getPhoneNumber()+<br><br>;
   profile.save();

  ExtendedProfile extendedprofile = new ExtendedProfile();
  message.InnerHtml += <u>ExtendedProfile Class</u></br>;
  message.InnerHtml += Firstname:+profile.getFirstname()+<br>;
  message.InnerHtml += Lastname:+profile.getLastname()+<br>;
  message.InnerHtml += Phone:+extendedprofile.getPhoneNumber()+<br>;
  message.InnerHtml += Address1:+extendedprofile.getAddress1()+<br>;
  message.InnerHtml += Address2:+extendedprofile.getAddress2()+<br>;
  message.InnerHtml += City:+extendedprofile.getCity()+<br>;
  message.InnerHtml += State:+extendedprofile.getState()+<br>;
  message.InnerHtml += Postal:+extendedprofile.getPostal()+<br>;
  message.InnerHtml += Description:+extendedprofile.getDescription()+<br>;

  extendedprofile.save();
}
</script>
<Meta http-equiv=Content-Type content=text/html; charset=gb2312>
<title></title>
</head>
<body style=font:Arial, Helvetica, sans-serif >
<b><h3>简单的继承/多态例子</h3></b><br><br>
object output:<br>
<br>
<p id=message runat=server />
</body>
</html>

类定义文件profile2.cs
using System;
using System.IO;
using System.Xml;
namespace shai     //名称空间shai
{
  interface ISaveData    //定义一个接口ISaveData,他作为Profile的基类被继承,由于其有多态性的特点,可以被
  {                                //不同类调用其中的方法,并修改
    void save();
  }

  public class Profile:ISaveData     //定义类Profile
  {
    protected string _firstname;       //里面包含三个属性,分别为_firstname、_lastname、phonenumber
    protected string _lastname;
    protected string _phonenumber;

 public Profile()                            //为属性定义其中的初始值
 {
   _firstname = Saidy;
   _lastname = Chen;
   _phonenumber = (010)88716990;
 }

 public string getPhoneNumber()           //Profile类中的方法getPhoneNumber()
 {
   return _phonenumber;
 }
 public virtual void setPhonenumber(string phonenumber)
 {
   _phonenumber = phonenumber;
 }

 public string getFirstname()                 //Profile类中的方法getFirstname()
 {
   return _firstname;
 }
 public void setFirstname(string firstname)
 {
   _firstname = firstname;
 }

 public string getLastname()                  //Profile类中的方法getLastname()
 {
   return _lastname;
 }
 public void setLastname(string lastname)
 {
   _lastname = lastname;
 }

 public virtual void save()            //调用ISaveData接口的save()方法
 {
   //保存数据为Text格式
   FileStream fs = new FileStream(D:\\myweb2\\profile2.txt,FileMode.Create,FileAccess.Write);
   StreamWriter sw = new StreamWriter(fs);
   sw.WriteLine(Firstname:+_firstname.ToString());
   sw.WriteLine(Lastname:+_lastname.ToString());
   sw.WriteLine(Phone:+_phonenumber.ToString());
   sw.Flush();
   sw.Close();
   fs.Close();
  }
}

  public class ExtendedProfile:Profile        建立Profile子类ExtendedProfile,他可以继承Profile中的方法
  {
    protected string _address1;                  //子类ExtendedProfile的属性
    protected string _address2;
    protected string _city;
    protected string _state;
    protected string _postal;
    protected string _description;

 public ExtendedProfile()                      //子类ExtendedProfile中属性的初始值
 {
   _address1 = 清华大学;
   _address2 = 清华大学物理实验室;
   _city = 北京;
   _state = 北京;
   _postal = 100024;
   _description = 教授;
 }

 public override void setPhonenumber(string phonenumber)           //继承类Profile中的setPhonenumber()方法
 {                                                                                                 //setPhonenumber()方法的重载
   _phonenumber = phonenumber;
 }

 public string getAddress1()          //子类ExtendedProfile中的方法getAddress1(),以下类推
 {
   return _address1;
 }
 public string getAddress2() 
 {
   return _address2;
 }
 public void setAddress(string address1,string address2)
 {
   _address1 = address1;
   _address2 = address2;
 }

 public string getCity()
 {
   return _city;
 }
 public void setCity(string city)
 {
   _city = city;
 }

 public string getState()
 {
   return _state;
 }
 public void setState(string state)
 {
   _state = state;
 }

 public string getPostal()
 {
   return _postal;
 }
 public void setPostal(string postal)
 {
   _postal = postal;
 }

 public string getDescription()
 {
   return _description;
 }
 public void setDescription(string description)
 {
   _description = description;
 }

 public override void save()                //调用接口ISaveData()中的方法save(),save()方法的重载,由于多态性
 {                                                       //子类ExtendedProfile可以自定义修改save()方法
   string _document = d:\\myweb2\\saidy.xml;
   XmlTextWriter writer = null;           //保存为一个Xml文件
   try
   {
    writer = new XmlTextWriter(_document,null);
    writer.Formatting = Formatting.Indented;
    writer.WriteStartDocument(false);
    writer.WriteDocType(Profile,null,null,null);            //表示<!DOCTYPE Profile>
    writer.WriteStartElement(Profile);                         //生成根元素   
    writer.WriteElementString(firstname,_firstname);   //生成子元素  <firstname>_firstname</firstname>
    writer.WriteElementString(lastname,_lastname);
    writer.WriteElementString(phonenumber,_phonenumber);
    writer.WriteElementString(address1,_address1);
    writer.WriteElementString(address2,_address2);
    writer.WriteElementString(city,_city);
    writer.WriteElementString(state,_state);
    writer.WriteElementString(postal,_postal);
  writer.WriteEndElement();
  writer.Flush();
  writer.Close();
   }
   catch(Exception ee)
   {
     Console.WriteLine(Exception:{0},ee.ToString());
   }
 }
}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐