关于继承和多态性的实例代码
本人学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()); } } } }
以上是关于继承和多态性的实例代码的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

在函数继承中,使用“基类指针”和“派生类指针”来理解继承机制:基类指针指向派生类对象时,执行向上转型,只访问基类成员。派生类指针指向基类对象时,执行向下转型(不安全),必须谨慎使用。

继承和多态性会影响类的耦合度:继承会增加耦合度,因为派生类依赖于基类。多态性可以降低耦合度,因为对象可以通过虚函数和基类指针以一致的方式响应消息。最佳实践包括谨慎使用继承、定义公共接口、避免向基类添加数据成员,以及通过依赖注入解耦类。实战案例展示了如何使用多态性和依赖注入降低银行账户应用程序中的耦合度。

继承错误调试技巧:确保正确的继承关系。使用调试器逐步执行代码,检查变量值。确保正确使用virtual修饰符。检查隐藏的继承带来的菱形继承问题。检查抽象类中未实现的纯虚函数。

C++函数继承详解:掌握“is-a”和“has-a”关系什么是函数继承?函数继承是C++中一种将派生类中定义的方法与基类中定义的方法关联起来的技术。它允许派生类访问和重写基类的方法,从而扩展了基类的功能。“is-a”和“has-a”关系在函数继承中,“is-a”关系指派生类是基类的子类型,也就是说,派生类“继承”了基类的特性和行为。“has-a”关系指派生类包含对基类对象的引用或指针,也就是说,派生类“拥有”了基类对象。语法以下是如何实现函数继承的语法:classDerivedClass:pu

析构函数在C++多态性中至关重要,它确保派生类对象在销毁时正确清理内存。多态性允许不同类型的对象响应相同方法调用。析构函数在对象销毁时自动调用,释放其内存。派生类析构函数调用基类析构函数,确保释放基类内存。

什么是面向对象编程?面向对象编程(OOP)是一种编程范式,它将现实世界中的实体抽象为类,并使用对象来表示这些实体。类定义了对象的属性和行为,而对象则实例化了类。OOP的主要优点在于它可以使代码更易于理解、维护和重用。OOP的基本概念OOP的主要概念包括类、对象、属性和方法。类是对象的蓝图,它定义了对象的属性和行为。对象是类的实例,它具有类的所有属性和行为。属性是对象的特征,它可以存储数据。方法是对象的函数,它可以对对象的数据进行操作。OOP的优点OOP的主要优点包括:可重用性:OOP可以使代码更

C++多态性的优点和缺点:优点:代码重用性:通用代码可处理不同对象类型。可扩展性:轻松添加新类,无需修改现有代码。灵活性和可维护性:行为与类型分离,提升代码灵活性。缺点:运行时开销:虚函数分派导致开销增加。代码复杂性:多继承层次结构增加复杂性。二进制大小:虚函数使用增加二进制文件大小。实战案例:动物类层次结构中,多态性使不同的动物对象都能通过Animal指针发出声音。

在以下情况下不应使用C++函数继承:派生类需要不同实现时,应创建具有不同实现的新函数。派生类不需要函数时,应声明为一个空类或使用私有、未实现的基类成员函数来禁用函数继承。函数不需要继承时,应使用其他机制(例如模板)来实现代码重用。
