尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

面向对象编程:从类到多态的实战指南

面向对象编程:从类到多态的实战指南 实例1电话卡类2套餐类1、面向对象编程OOP面向对象编程是一种以 “对象” 为核心的编程思想把现实中的事物抽象成程序里的 “类” 和 “对象”通过封装、继承、多态来管理代码。如上图中我们把 “移动卡”“套餐”这些现实概念抽象成了对应的类。1类和对象类是对象的模板对象是类的实例。类是对象的抽象模板设计图纸定义了对象的属性特征和方法行为。如学生模板定义学号、姓名、性别、专业、学习。学生就是类学号、姓名、性别和专业就类是属性学习就类的行为。对象是根据图纸造出来的实例是类在内存中创建的具体实体。真实的一个学生是有具体学号2301010122和姓名张三的 一个学生模板可以填写很多学生信息即一个类可以创建无数个对象。本例中的话唠套餐、 网虫套餐、超级套餐类、电话卡就是类资费、通话时长、短信条数、上网流量就是套餐的属性。打印信息、通话、发短信、上网就是套餐的行为。电话卡有卡号、余额等属性行为有打电话、上网等。一张真实的话唠套餐58 元 / 月500 分钟通话 一张真实的网虫套餐68 元 / 月10GB 流量 一张真实的手机号卡 13800138000这些就是对象2类和对象的关系总结 4 句类是抽象的对象是具体的类是对象的模板对象是类的实例一个类可以创建多个对象2、类的封装与继承1封装封装是把类的属性私有化用 private 修饰通过 public 的 getter/setter 方法对外提供访问和修改的入口隐藏内部实现细节。例电话卡中的卡号cardNumber是 private 的外部只能通过 getCardNumber() 方法读取通过setCardNumber()方法修改卡号但余额balance外部可以通过 getBalance() 方法来读取余额但不能修改余额所以就不提供setMony()方法保证数据安全。2继承1父类如果多个类is-a有相同的属性和方法可以将相同属性和方法抽取出来写成一个共同的父类抽象类由子类继承父类子类继承父类后自动拥有父类的属性和方法还可以扩展自己的功能各个子类有不同的属性和方法实现代码复用。例话唠套餐TalkPackage、超级套餐SupperPackage、网虫套餐NetPackage 都继承自抽象类 ServicePackage所以它们都自带名称name、资费 price 属性和showInof方法。其中showInfo方法强制所有套餐子类实现自己的套餐信息展示逻辑比如话唠套餐要显示通话时长和短信数网虫套餐要显示流量超级套餐要显示全部信息。这种方法需要写成抽象方法只有方法声明没有方法体因为方法的实现强制在各个子类实现。2抽象类和最终类抽象类abstract必须被继承不能直接 new 对象用来当父类模板。抽象类可包含抽象方法用于定义子类的统一规范。最终类final禁止被继承是 最后一代不能再有子类。即不能被继承。最终类可实例化用于保护类的实现不被修改扩展。3、接口与多态1接口接口是一种特殊的抽象类型只定义方法的签名不提供具体实现用来定义 “行为规范”和“具备的能力”。继承表示 is-a 关系子类是父类的一种强调 “属于”。接口表示 can-do 关系类具备接口定义的行为能力强调 “能做”。例图中的 CallService、SendService、NetService 是接口分别定义了通话、短信、上网的行为规范或行为能力。套餐类通过实现这些接口来获得对应的服务能力比如 TalkPackage 实现了 CallService 和 SendService说明它支持通话和短信服务。如前端工程师编程开发工程师编程学生编程三个类前端工程师和开发工程师是一个员工is-a可以继承但学生不是一个员工不能继承。解决方法是将编程写成一个接口三个子类就可以实现这个接口can-do即全具有编程能力。2多态同一类型的对象调用同一个方法时表现出不同的行为。即抽象类或接口的同一个方法在不同的子类实现不同。这个方法就是抽象方法。抽象方法是没有实现的只能在子类去实现。记住三句话继承是多态的基础子类重写父类接口方法父类指向子类的应用例ServicePackage 类型的变量可以指向 TalkPackage、SupperPackage、NetPackage 任意一个子类对象调用 call() 方法时会根据实际对象的类型执行不同的实现多态的动态绑定。4、几个关键字1abstract抽象意思抽象、只定义规则不写具体实现用法修饰类不能 new、修饰方法没有方法体2final最终意思最终的、不可改变的用法修饰类不能被继承修饰方法不能被重写修饰变量变成常量不能改值3 static静态意思静态的、属于类的不属于对象用法修饰变量、方法、代码块特点用类名直接调用不用 new 对象4this本对象意思代表当前对象自己用法访问本类属性this.name调用本类方法this.method()调用本类构造this()5super父对象意思代表父类对象用法访问父类属性super.name调用父类方法super.method()调用父类构造super()5、四种修饰符修饰符同类同包子类不同包public✅✅✅✅protected✅✅✅❌default✅✅❌❌private✅❌❌❌
返回列表