欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    类的封装、继承和多态.ppt

    • 资源ID:6597373       资源大小:4.44MB        全文页数:61页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    类的封装、继承和多态.ppt

    类的封装、继承和多态,金陵科技学院刘晶2011.3,3,面向对象编程,2,复 习,基本语法规则数据类型运算符与表达式流程控制语句分支语句循环语句Java的数组和字符串,面向对象编程,3,主要内容,OOP的概念类和对象OOP的特点类的封装性类的继承性类的多态性类的抽象性,面向对象编程,4,OOP概念,公共数据,算法数据结构,对象消息,面向对象编程,5,OOP的主要特点,封装性(encapsulation)即实现了信息的隐藏提高了程序的模块化及安全性,且易于维护继承性(inheritance),交通工具,Java仅支持单重继承,面向对象编程,6,OOP的主要特点(续),继承性(续)体现了对现实世界的抽象模拟提高了代码的复用性,增强了软件的扩充性多态性(polymorphism)用同一个名字调用实现不同操作的方法方式1:不同的类之间的同名方法如:中国人/日本人/美国人 说话方式2:参数不同的同名方法(如加法)使用灵活方便,且降低了维护和编程量,面向对象编程,7,JAVA中的OOP,几个概念类:既包括数据又包括作用于数据的一组操作的封装体系统类库中已定义好的类用户自定义的类对象(实例instance):类的实例创建某个类的具体对象(类似变量声明)类名欲创建的对象名 new 类名(参数表);例如:String s=new String(“Hello!”);,面向对象编程,8,JAVA中的OOP(续),Java中的类结构基类:所有JAVA的类都派生自ObjectJava的类可组织在包(package)中Java提供的标准类库分布在一系列的包中,如java.lang,java.util,等编程的过程就是继承基类或标准类而创建、定义特殊子类的过程,public class Object public Object()/构造方法 public String toString()/描述对象 public boolean equals(Object obj)/比较对象相等 protected void finalize()throws Throwable,面向对象编程,9,类的封装性,类说明语法:类修饰符 class 类名 extends 超类名 implements 接口名 成员变量定义;成员方法定义;,类体,面向对象编程,10,类的封装性,类修饰符(Modifier):public:允许其他类(没有限制)访问本类,一个源文件仅可以有一个public类缺省:可被当前包中的其他类访问abstract:没有实例的抽象概念类,必需派生子类final:不能再被扩展,不包含子类的类;易于安全性的实现,或用于创建固定功能的类父类继承声明:extends 父类名实现接口(interface):implements 接口名,面向对象编程,11,类的封装性,例:public abstract class shapeclass rectangle extends shapefinal class roundrect extends rectangle.?final可以与abstract一起使用吗?,面向对象编程,12,类的封装性,声明成员变量member的语法:修饰符 数据类型 变量名;引用:对象名.变量修饰符访问控制符public:可被所有其他类引用protected:可被本包中的类及子类引用,面向对象编程,13,类的封装性,缺省:可被本包中的类引用private protected:可被该类自身、子类引用private:仅可被该类自身引用和修改,不能被其他任何类(包括子类)引用static:类成员变量,对所有的实例一致,引用时前缀可使用类名或对象名final:数值不变常量,定义同时应对其进行初始化,面向对象编程,14,类的封装性,例:class shapeprivate protected int x;private static int y;static final float MAX_AREA=100.0f;.,面向对象编程,15,类的封装性,方法的声明语法:修饰符 返回类型 方法名(参数列表)throws 异常名 方法体;定义对类内成员变量(数据)的操作谁可以调用方法、接受哪些参数、如何返回信息,面向对象编程,16,类的封装性,修饰符(Modifier):访问控制符:public、private、protected、private protectedstatic:静态方法,又称类方法使用类名或对象名作为前缀,建议使用类名在static方法体中只能直接使用static变量和static方法不可被覆盖(重写)abstract:只有声明没有语句,要在子类中通过重新定义(override)来实现final:不可被覆盖(重写)(override),面向对象编程,17,类的封装性,返回类型:void、return参数列表:值传递 PassTest.javathrows:通告本方法中会产生的例外(异常)类型,提醒调用者要对相应的可能例外进行处理。当执行此方法并发生了例外时,程序会转入调用者编制的例外处理程序段。,面向对象编程,18,类及其成员的访问权限,类中成员的访问权限类的访问权限:只有public和缺省两种。public class Date1/公有的类class Date1_ex/默认的类声明公有的set()和get()方法存取对象的属性,面向对象编程,19,对象,创建对象过程声明对象:为引用类型变量分配引用空间创建实例(对象实例化):为实例分配存储空间,并对实例属性初始化默认初始化显示初始化(可省)执行构造方法初始化为对象赋值(必为地址值)对象的使用:用点操作符访问对象中的成员【例3.1】声明日期类及使用日期对象。,面向对象编程,20,对象的引用模型,面向对象编程,21,对象的关系运算与比较相等,面向对象编程,22,构造方法(constructor),问题的提出Java试图在每个对象一诞生时,就给它一确定的状态,但有时这种系统的缺省初值(系统定义构造方法赋值)不合适;所以在创建一个新对象时,需用自定义构造方法完成合法的初始化,使类内成员的初始化工作不依赖于外界完成。体现了面向对象的autonomy原则。,面向对象编程,23,构造方法(续),构造方法与类同名构造方法没有返回值(无需void说明)构造方法不能被继承构造方法只能在创建类对象时由系统隐含调用(new 构造方法),而不能直接调用当创建类对象时,自动执行类的构造方法,初始化新对象的成员变量,面向对象编程,24,构造方法(续),一个类中可创建多个构造方法(重载)当类中声明了用户自定义的构造方时,则覆盖不带参数的默认构造方法例:BankTester.java,面向对象编程,25,一个小问题?,BankAccount r1=new BankAccount();BankAccount r2=r1;这时,内存中为BankAccount类创建了几个实例呢?这个实例有几个引用(reference)呢?BankAccount r2=new BankAccount(r1);这时又有几个BankAccount类的实例和引用呢?,面向对象编程,26,拷贝构造方法,使用拷贝构造方法复制实例浅拷贝:对象成员变量都为基本数据类型深拷贝:对象成员变量为引用数据类型,面向对象编程,27,析构方法,Public void finalize()在一个对象占用的内存空间被返还给系统存储堆之前自动执行也可对象调用执行:d.finalize();Java的垃圾回收机制:每个对象有自己的REFERENCE计数器,计数器减为零时对象丢失,系统在其后某个时刻自动回收不再可用的对象,调用析构方法,面向对象编程,28,this引用,指代对象本身this访问本类的成员变量和成员方法this.成员变量this.成员方法(参数列表)调用本类重载的构造方法this(参数列表),面向对象编程,29,this引用,例子:class Point int x,y;Point(int x,int y)this.x=x;this.y=y;/this指代本类对象 Point()this(0,0);/this调用本类带两个整形参数的构造方法 public Point getPoint()Point p=this;/this指代调用本方法的当前对象 return p;,面向对象编程,30,实例成员变量与静态成员变量,实例成员变量与静态成员变量两者声明时的差别public class Person1 String name;/姓名,实例成员变量 int age;/年龄 static int count;/人数,类成员变量两者存储结构的差别两者引用方式的差别,面向对象编程,31,实例成员变量与静态成员变量,两者存储结构的差别,面向对象编程,32,实例成员变量与静态成员变量,两者引用方式的差别类名.静态成员变量名如:Person1.count=1;注:不能使用this引用对象名.实例成员变量名如:Person1 p1=new Person1();p1.age=20;,面向对象编程,33,实例成员变量与静态成员变量,Java语言在创建对象时不为静态成员变量分配空间,只为实例成员变量分配空间静态成员变量不依赖某一个具体的对象,即使没有创建一个它所属类的对象,它也是存在的,只要该类的代码装入,则该类成员变量就是存在的,就可以使用,面向对象编程,34,实例成员方法与静态成员方法,两者声明时的差别public static int howMany()/静态成员方法 return count;/静态成员方法只能直接访问静态成员变量public static void main(String args)/main方法也是静态成员方法,面向对象编程,35,实例成员方法与静态成员方法,两者引用方式的差别静态成员方法与静态成员变量类似,不依赖于具体的对象,在调用时直接通过类名来调用:类名.类方法名(方法的参数表),面向对象编程,36,实例成员方法与静态成员方法,两者方法体中语句的差别静态成员方法的方法体中不能使用this,因为对静态成员方法来说,不存在当前对象不能直接访问所在类的实例成员变量及成员方法例子:Member.java,面向对象编程,37,类封装性实例,【例3.2】日期类的封装设计并重载构造方法 成员变量设计为私有的访问权限,限制其他类对成员变量的访问成员方法设计为公有的访问权限,提供给其他类使用使用this引用增强程序的可维护性使用类名调用静态方法【例3.3】使用对象作为成员变量并实现深拷贝的Person类,面向对象编程,38,类封装小结,类中的数据使用private定义使用public方法来操作数据把逻辑上相关联的数据封装成新的类来使用,类似结构体不要定义太庞大的类,要把无关的功能适当分离培养良好的编程风格,面向对象编程,39,Java中类的继承,创建类时指明它为某存在类的子类 extends 超类/父类名 父类来自系统类库用户自定义类子类继承的部分父子类在同一个包中时,子类继承除 private 外所有父类成员父子类在不同包中时,子类继承公开级和保护级父类成员子类不能继承父类构造方法Java不支持多重继承(但可用接口实现),面向对象编程,40,类的继承(续),子类对父类可做扩展和特殊化保留父类原有的成员变量和成员方法创建新的成员变量和方法重新定义父类中已有的变量:隐藏重新定义父类中已有的方法:覆盖(override)重载(overload)【例3.4】Student类继承Person类(P85),面向对象编程,41,类的继承(续),子类在隐藏了父类的成员变量或覆盖了父类的方法后,常常还要用到父类的成员直接调用父类的方法可减少代码的重复super:直接父类的成员(只能上溯一层)调用父类带参数的构造方法super(参数列表)引用父类同名成员当子类隐藏父类成员变量时super.成员变量当子类覆盖父类成员方法时super.成员方法(参数列表),面向对象编程,42,super关键字的使用,class Testint i;public Test(int i)this.i=i;public class Test1 extends Testdouble j;public Test1(int i,double j)super(i);/调用超类构造方法this.j=j;,public void print()System.out.println(i of super class+i);System.out.println(j of sub class+j);public static void main(String args)Test1 t1=new Test1(5,3.14);t1.print();,面向对象编程,43,用super访问超类同名变量,class Testint i;public Test()i=10;public class Test1 extends Testdouble i;public Test1()i=12.345678;public void print()System.out.println(i of subclass+i);/访问子类成员i,System.out.println(i of superclass+super.i);/访问超类成员ipublic static void main(String args)Test1 t1=new Test1();t1.print();,面向对象编程,44,用super访问超类同名方法,class Testint i;public Test()i=10;public void print()System.out.println(i of super class+i);public class Test1 extends Test,double i;public Test1()i=12.345678;public void print()System.out.println(i of sub class+i);super.print();/访问超类中定义的print方法public static void main(String args)Test1 t1=new Test1();t1.print();,面向对象编程,45,继承中子类对象创建过程,例:Sandwich.java注意构造方法的调用顺序:按继承顺序依次调用父类的不含参数的构造方法,直到到达本子类依次执行本子类成员对象的构造方法最后,执行本子类的构造方法,Meal()Lunch()PortableLunch()Bread()Cheese()Lettuce()Sandwich(),面向对象编程,46,多态性,多态:一种定义,多种实现同名提高了抽象程度,降低维护工作量,多态,方法的多态,重载,覆盖(重写),类型的多态,子类 is A父类,面向对象编程,47,方法的多态,重载:同类中或父子类中的同名方法定义、调用时如何区别被重载的方法用不同的参数列表来区别同名的不同方法,不能用返回值(可忽略)来区别例如:public void println(int i)public void println(float f)public void println(String s),面向对象编程,48,方法的多态,覆盖(重写):父子类中的同名方法子类中的方法应与父类中的被覆盖的方法有完全相同的:参数列表、返回值由调用方法的对象名以示区别覆盖规则覆盖方法不能比被覆盖方法访问权限小覆盖方法不能比被覆盖方法抛出异常更多问:父类哪些方法不能被覆盖?哪些必需被覆盖?【例3.5】Student类重定义从父类继承来的成员(P89),面向对象编程,49,类型的多态,子类对象可类型转换成父类对象(upcast)SubClass ba=new SubClass();SuperClass pa=ba;父类对象不可转换为子类对象SubClass ba=pa;,面向对象编程,50,类型的多态,编译时多态性方法重载都是编译时多态方法覆盖时,当对象引用本类实例时为编译时多态Person p1=new Person(李小明,new MyDate(1979,3,15);p1.toString()/执行Person类的toString()Student s1=new Student(p1,计算机);s1.toString()/执行Student类的toString(),面向对象编程,51,类型的多态,运行时多态性Person p2=new Student(张小莉,new MyDate(1989,1,5);/父类对象引用子类实例p2.toString()/执行Student类的toString(),面向对象编程,52,类型的多态,A a=new A();B b=new B();A a1=(A)b;,a.aM a.aFb.aM b.aFa1.aM a1.aF,a1.aF:动态/滞后联编其他:静态联编,面向对象编程,53,类型的多态,instanceof 对象运算符用来判断对象属于哪个类例如,public class Employee extends Objectpublic class Manager extends Employeepublic class Engineer extends Employee-public void doSomething(Employee e)if(e instanceof Manager)/Process a Manager else if(e instanceof Engineer)/Process an Engineer else/Process any other type of Employee,面向对象编程,54,【例3.6】在对象数组中查找(P96),对象数组及计数运行时多态性体现System.out.println(tablei.toString();,面向对象编程,55,抽象类,抽象类声明抽象类与抽象方法public abstract class ClosedFigure/闭合图形抽象类 public abstract double area();/计算面积,抽象方法,以分号;结束,面向对象编程,56,抽象类,抽象类可以不包含抽象方法,但包含抽象方法的类必须声明为抽象类构造方法、静态成员方法不能被声明为抽象方法抽象类不能被实例化抽象方法必须被子类覆盖子类必需实现父类中的所有抽象方法,否则子类仍为抽象类,面向对象编程,57,抽象类,抽象类与抽象方法的作用定义抽象类的目的主要是提供方法声明与方法实现相分离的机制,使多个不同的子类能表现出共同的行为能力,体现若干类之间的联系,这是Java语言多态性的一个重要表现。,面向对象编程,58,抽象类,【例3.7】闭合图形抽象类及其子类,面向对象编程,59,最终类,最终方法public class Circle1 extends Graphics1 public final double area()/最终方法,不能被子类覆盖 return Math.PI*this.radius*this.radius;最终类public final class Math extends Object/Math为最终类,不可派生子类public class MyMath extends Math/编译错,最终类不能被继承,面向对象编程,60,本章小结,目的:类的封装、继承、多态和抽象性。要求:掌握类的封装措施,理解对象的引用模型;掌握类的继承原则,使用重载和覆盖等多态设计可复用方法,理解运行时多态;理解抽象类和最终类的作用。掌握JDK创建自定义包、声明导入包的方法。重点:类的封装、继承原则,重载和覆盖等多态,运行时多态性。难点:运行时多态性。,面向对象编程,61,课下练习(三),仔细体会课上的例子,并运行之。阅读银行业务的继承版程序InheritClass.java,注意其子类的利息计算不合理,请通过合适的手段来修改。(提示:可使用抽象类override)创建一个类,声明一个无参数的构造方法,打印类已创建的信息;再重载一个具有String参数的构造方法,打印参数信息;并创建主类验证之。,

    注意事项

    本文(类的封装、继承和多态.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开