Java课件 09-封装、继承、多态学习资料_第1页
Java课件 09-封装、继承、多态学习资料_第2页
Java课件 09-封装、继承、多态学习资料_第3页
Java课件 09-封装、继承、多态学习资料_第4页
Java课件 09-封装、继承、多态学习资料_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

封装、继承、多态回顾如何在类中编写方法?如何创建对象?本节目标掌握构造方法的作用和特点什么是方法重载如何实现类的封装掌握继承的优点和实现掌握子类重写父类方法掌握继承下构造方法的执行过程掌握抽象类和抽象方法的使用掌握final修饰属性、方法和类掌握多态的优势和应用场合掌握父类和子类之间的类型转换使用父类作为方法形参实现多态一个现实世界的问题宠物—现实世界的对象如何在计算机中描述它?从现实中抽象出类分三步:1.找出它的种类2.找出它的属性3.找出它的行为用面向对象描述世界用面向对象的思想描述世界第一步:发现类根据“对象”抽象出“类”classDog{

}名词各个狗对象用面向对象描述世界第二步:发现类的属性

狗类共有的特征:1.品种2.年龄3.昵称4.健康情况5.跟主人的亲密度……classDog{

Stringname="旺财";//昵称

inthealth=100;//健康值

intlove=0;//亲密度

Stringstrain="拉布拉多犬";//品种

}只放我关心的属性名词用面向对象描述世界第三步:发现类的方法

狗类共有的行为:1.跑2.吠3.输出狗的信息……动词classDog{

Stringname="旺财";//昵称inthealth=100;//健康值intlove=0;//亲密度Stringstrain=

"拉布拉多犬";//品种

/*输出狗的信息*/

publicvoidprint(){

//输出狗信息的代码}

}只放我关心的方法类图使用类图描述类用于分析和设计“类”直观、容易理解+name:String+health:int+love:int+strain:StringDog+print():void“+”:public“-”:private类名返回值类型类型属性名参数:名字:类型,名字:类型方法名构造方法对象初始化Dogpgn=newDog();="大黄";pgn.love=50;classDog{

//

属性

/*无参构造方法*/publicDog(){name="大黄";health=100;love=20;System.out.println("执行构造方法");}}使用构造方法:Dogpgn1=new

Dog();能否在创建对象的同时就完成赋值?构造方法构造方法构造方法public

构造方法名(){//初始化代码}与类名相同没有返回值类型publicDog(){name="大黄";health=100;love=20;System.out.println("执行构造方法");}可以指定参数构造方法没有返回值。构造方法不能从父类继承。如果没有为类定义任何构造方法,系统将为该类定义一个缺省的默认构造方法,该方法既没有形式参数,也没有任何具体的语句,不完成任何操作。构造方法不能直接通过方法名引用,必须通过new运算符。在构造方法中可以调用当前类和其父类的构造方法,但必须是方法体的第一条语句。构造方法构造方法阅读代码,说出运行结果,并指出原因classPenguin{publicvoidPenguin(){ health=10;sex="雄";System.out.println("执行构造方法");}publicvoidprint(){System.out.println("企鹅的名字是"+name+",健康值是"+health+",性别是"+sex);}}Penguinpgn3=newPenguin();pgn3.print();有返回值类型,不是构造方法在Java中,同一个类中有多个同名的方法,只要参数声明不同,该方法就称为重载。这个过程就称为方法重载。当重载方法被调用时,Java通过参数的类型和数量来确定具体调用哪个方法。因而在设计重载方法时,要确保方法参数的类型数量不相同。方法重载方法重载一个类是否可以有多个构造方法?方法重载,指同一个类中多个方法:方法名相同参数列表不同与返回值、访问修饰符无关

publicPenguin(){//代码

}publicPenguin(Stringname,inthealth,intlove,Stringsex){//代码

}示例2

System.out.println(45);System.out.println(true);System.out.println("狗在玩耍!");示例1

为什么要使用封装下面代码有什么问题?如何解决上面设计的缺陷?Dogd=newDog();d.health=1000;不合理的赋值

使用封装

什么是封装封装的概念封装的好处封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问

隐藏类的实现细节只能通过规定方法访问数据方便加入控制语句方便修改实现如何使用封装封装的步骤修改属性的可见性创建getter/setter方法在getter/setter方法中加入属性控制语句设为private用于属性的读写对属性值的合法性进行判断classDog{

privateStringname="旺财";//昵称

privateinthealth=100;//健康值

privateintlove=0;//亲密度

privateStringstrain="拉布拉多犬";//品种

publicintgetHealth(){returnhealth;}

publicvoidsetHealth

(inthealth){if(health>100||health<0){this.health=40;System.out.println("健康值应该在0和100之间,默认值是40");}else

this.health=health;}//其它getter/setter方法}this代表当前对象1223-name:String-health:int-love:int-strain:StringDog+print():void+setHealth():void+getHealth():String……this的用法this关键字的用法调用属性调用方法调用构造方法this.health=100;

this.name="大黄";this.print();

this();如果使用,必须是构造方法中的第一条语句this("小黑",100,100,"雄");练习—用类图设计Dog和Penguin类需求说明:运用面向对象思想抽象出Dog类和Penguin类,画出对应类图根据类图编写Dog类和Penguin类添加默认构造方法完成时间:20分钟类型属性行为狗昵称健康值亲密度品种输出信息企鹅昵称健康值亲密度性别输出信息为什么使用继承这两个类图有什么问题?-name:String-health:int-love:int-strain:StringDog+print():void+getName():String+getHealth

():int+getLove():int+getStrain:String+Dog()-name:String-health:int-love:int-sex:StringPenguin+print():void+getName():String+getHealth

():int+getLove():int+getSex():String+Penguin()使用继承优化设计将重复代码抽取到父类中为什么使用继承使用继承优化后:子类与父类是is-a关系

减少代码量方便修改代码如何使用继承使用继承编写父类编写子类,继承父类classPet{

//公共的属性和方法}classDogextendsPet{

//子类特有的属性和方法}classPenguinextendsPet{

}只能继承一个父类继承关键字理解继承子类访问父类成员访问父类属性访问父类方法使用super关键字super.name;super.print();super代表父类对象理解继承有些父类成员不能继承private成员构造方法理解继承访问修饰符protected可以修饰属性和方法本类、同包、子类可以访问访问修饰符总结访问修饰符本类同包子类其他private√默认(friendly)√√protected√√√public√√√√理解继承继承后的初始化顺序父类构造方法子类构造方法

理解继承在Java中如果没有使用extends关键字,则该类直接继承了Object类。这主要是因为在Java中java.lang.Object类是所有类的祖先。例如:

publicclassStudent{ }在这个例子中Student类的直接父类就是Objcet类,Student类继承了Objcet类的所有方法和属性。在何处使用继承何时使用继承?继承与真实世界类似只要说“猫是哺乳动物”,猫的很多属性、行为就不言自明了藏獒是一种狗继承是代码重用的一种方式将子类都有的属性和行为放到父类中符合is-a关系的设计使用继承小结阅读代码,说出运行结果classCar{privateintsite=4;//座位数Car(){System.out.println("载客量是"+site+"人);}publicvoidsetSite(intsite){this.site=site;}voidprint(){System.out.print("载客量是"+site+"人");}}classBusextendsCar{Bus(intsite){setSite(site);}}publicstaticvoidmain(String[]args){Busbus=newBus(20);bus.print();}载客量是4人载客量是20人方法重写子类中有和父类相同签名的方法,会如何?子类重写父类方法继承中的构造方法构造方法也会被重写吗?如何在子类中调用父类的构造方法?super();super(参数表);可以被默认添加只能是构造方法的第一条语句不能被继承因此不能重写什么是多态生活中的多态你能列举出一个多态的生活示例吗?程序中的多态多态:同一个引用类型,使用不同的实例而执行不同操作父类引用,子类对象

同一种事物,由于条件不同,产生的结果也不同如何实现多态用多态实现打印机分为黑白打印机和彩色打印机不同类型的打印机打印效果不同黑白打印机彩色打印机打印如何实现多态使用多态实现思路编写父类编写子类,子类重写父类方法运行时,使用父类的类型,子类的对象计算机可以连接各种打印机无论连接何种打印机打印方法都相同根据连接打印机不同,效果也不同如何实现多态编码实现实现多态的两个要素:1.方法重写2.使用父类类型abstractclassPrinter(){

print(Stringstr);}classColorPrinter()extendPrinter{

print(Stringstr)

{System.out.println("输出彩色的"+str);}}classBlackPrinter()extendPrinter{

print(Stringstr)

{System.out.println("输出黑白的"+str);}}publicstaticvoidmain(String[]args){

Printerp=newColorPrinter();p.print();p=newBlackPrinter();p.print();}父类子类运行同一种操作方式,不同的操作对象

只能调用父类已经定义的方法

方法重写方法重写的规则在继承关系的子类中重写的方法名、参数、返回值类型必须与父类相同私有方法不能继承因而也无法重写

位置方法名参数表返回值访问修饰符方法重写子类相同相同相同不能比父类更严格方法重载同类相同不相同无关无关方法重写方法重

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论