您好,欢迎访问三七文档
第3章类与对象2020/1/18Java程序设计与开发复习设计JAVA程序,计算2个整数参数的和,并输出。例如:设计MyApp.class,执行:JavaMyApp203412输出:Ans=6152020/1/18Java程序设计与开发2020/1/18本章着重介绍Java面向对象编程思想,以及类,对象,多态,抽象类,接口,包等重要概念.Java类设计方法多态,抽象类,接口是重点难点.包是组织Java类的一种松耦合结构.第3章类与对象Java程序设计与开发2020/1/183.1OOP基础3.1.1类3.1.2对象3.1.3消息3.2继承3.2.1创建子类3.2.2成员变量和方法3.2.3对象的构造和初始化过程3.2.4上转型对象3.2.5关键字this和super3.2.6对象的撤销和清理3.3多态3.3.1基本概念3.3.2方法重载3.3.3方法覆盖3.3.4变量覆盖3.4修饰符3.4.1访问修饰符3.4.2非访问修饰符3.5内部类和匿名内部类3.5.1内部类3.5.2匿名内部类第3章类与对象下面继续!Java程序设计与开发2020/1/183.6接口3.6.1接口的定义3.6.2接口与多重继承3.6.3接口的实现3.6.4接口中的变量和方法第3章类与对象(Cont.)3.7包3.7.1包的作用3.7.2Java中定义的包3.7.3自定义包的创建和使用3.7.4编译和生成包Java程序设计与开发2020/1/183.1面向对象基础3.1.1类类用来创建对象的模板,是一个抽象的概念。抽象是面向对象设计思想中的一个重要特性。抽象就是抽出事物的本质特性而暂时不考虑它们的细节。过程抽象和数据抽象是常用的两种主要抽象手段.客观世界的对象和操作计算机算法解空间数据程序员对问题的表达(抽象)客观世界的算法结果客观世界的对象程序设计的对象和操作输出数据问题空间此外,封装和模块化也是面向对象程序设计的重要特性。Java程序设计与开发2020/1/18类是广泛的概念,表示一个有共同性质的群体。而对象指的是具体的、一个实实在在的东西。对象是拥有数据和对数据操作的实体。每个对象都是某个“类”的一个“实例”,如梨子是水果中的一种。鼓是一种乐器等。在Java中,首先定义类,然后创建类的对象.3.1.1对象Java程序设计与开发2020/1/18消息也称为对象之间发出的请求。消息是通过调用其他对象的方法来实现的。消息具有如下3个方面的性质:1)同一对象可以发送不同形式的消息2)相同形式的消息可以发送给不同的对象,其响应可以不同3)消息的发送可以不考虑具体的接受者3.1.3消息Java程序设计与开发2020/1/18继承是OOP最显著的一个特征。通常把某一组相似对象的基础的、共有的、通用的属性设计成父类,再通过继承生成新的子类,代码重用性得到了提高.继承以原有某个类为基础生成新的类,增加一些新的成员变量和方法。新生成的类被称为子类(或派生类),原有的这个类被称为子类的父类(基类,也称超类).注意,Java顶层父类是Object.3.2继承Java程序设计与开发2020/1/18类的定义语法是:[修饰符]class类名[extends父类][implements接口名]{类成员变量定义类方法定义}类的修饰符用来说明类的特殊性质。分为三种:访问控制符:public或无抽象类说明符:abstract最终类说明符:final接口名跟在implements关键字后面,用来说明当前类中实现了哪个接口定义的功能和方法。接口是Java语言用来实现多重继承的一种特殊机制。3.2.1类的定义Java程序设计与开发2020/1/18如定义一个Person类和子类StudentclassPerson{Stringname;intage;publicvoideat(){}publicvoidsleep(){}}classStudentextendsPerson{privateStringshoolNO;privatevoiddoHomework();}Java程序设计与开发2020/1/183.2.2成员变量和方法成员变量用来描述类创建的对象的属性,而成员方法则刻画了对象特有的行为。Java中的成员变量根据不同的修饰符有3种类型:-实例变量,随对象被访问-类变量,随类被访问-常量Java程序设计与开发2020/1/18Java程序设计与开发2020/1/18方法的定义语法是:[修饰符][返回值]方法名([参数列表]){方法体}其中,修饰符共4种情况:public,protected,private或不提供.构造方法和普通方法实例方法和类方法Java程序设计与开发2020/1/18创建对象通过构造方法来创建。构造方法有以下特性:①方法名与类名相同②没有返回值③主要作用是完成对类对象的初始化工作④构造方法一般不能由编程人员显式地直接调用⑤在创建新对象时,系统会自动调用构造方法,为新对象初始化⑥一个类可以有多个构造方法,可以有0个、1个或多个参数。⑦构造方法总是和new运算符一起被调用3.2.3对象的构造和初始化过程*!*Java程序设计与开发2020/1/18当没有为类提供一个构造方法时,则编译器会自动加入一个不带参数的构造方法,称为默认构造方法。例如,classPerson{Person(){super();}}classStudentextendsPerson{Student(){super();}//系统自动行为publicstaticvoidmain(String[]args){newStudent();//会不会创建父类对象?}}classObject{Object(){}}Java程序设计与开发2020/1/18构造方法的执行过程当创建一个对象时,对象的各个变量根据其类型被设置为相应的默认初始值,然后调用构造方法。下面是执行步骤:①调用父类的构造方法,这个过程会重复下去.②按声明顺序对成员变量进行初始化.③执行构造方法中的各语句.构造器调用的顺序保证所有的父类构造方法都得到调用,保证其基类的成员得到正确的初始化并执行相关语句,然后对本对象的域(变量)进行初始化。Java的类加载过程和对象初始化顺序:父静块子静块main()父块父构子块子构Java程序设计与开发2020/1/18程序运行结果是:?publicclassMyApp{staticintw=6;inth=10;{System.out.println(初始化块:h=+h+w=+w);}Static{w=5;System.out.println(“静态初始化块:w=”+w);}MyApp(){h=101;w=102;System.out.println(“h=+h+w=+w);}publicstaticvoidmain(String[]args){newMyApp();}}Java程序设计与开发2020/1/18classA{inta;staticintb;{System.out.println(父亲块);}static{System.out.println(父亲静态块);}A(){System.out.println(父亲构造);}}publicclassMyAppextendsA{staticintw=6;inth=10;{System.out.println(子类块:h=+h+w=+w);}static{w=5;System.out.println(子类静态块:w=+w);}MyApp(){h=101;w=102;System.out.println(子类构造:h=+h+w=+w);}publicstaticvoidmain(String[]args){System.out.println(main());newMyApp();}}Java程序设计与开发2020/1/183.2.4上转型对象父类的声明引用子类的对象,称上转型对象对于Person类和子类Student;当创建Student子类对象时,并把这个对象的引用放到类Person声明的对象中,即:Personp=newStudent();或者Personp;Students=newStudent();p=s;则称对象p是子类对象s的上转型对象.对象的上转型对象的实体是子类负责创建的,只是失去了原对象的一些属性和方法,其特点如图所示:Java程序设计与开发2020/1/18原对象和上转型对象之间关系上转型对象的特点是:a.上转型对象不能操作子类新增的变量和方法.b.上转型对象可以操作子类继承或隐藏的变量,也可以使用子类继承或重写的方法.c.可将上转型对象再转换到一个子类对象,这时该子类对象又具备了子类的所有属性和功能.【例3.3】上转型对象classPerson{publicintpower=30;publicvoidsing(){System.out.println(personsinging!);}publicstaticvoidmain(String[]args){System.out.println(main());}}classStudentextendsPerson{publicintpower=10;publicvoidsing(){System.out.println(Studentsinging!);}publicstaticvoidmain(String[]args){System.out.println(main());}}publicclassTestUpCastType{publicstaticvoidmain(String[]args){Personp=newStudent();p.sing();System.out.println(p.power);}}2020/1/18Java程序设计与开发2020/1/18上转型对象应用举例.问题:下列语句正确吗?Students=newPerson();上转型对象是父类对象吗?Java程序设计与开发2020/1/183.2.5this和superthis,super分别指代当前对象和父类对象,通常出现在构造方法中。例如,classPerson{Stringname=“zhangshan”;publicPerson(){//super(name);//显式调用父类带参的构造方法this(name);//调用重载的构造方法,Person(name)?}publicPerson(Stringname){this.name=name;//为同名的成员变量赋值}…}Java程序设计与开发2020/1/18注意以下几点:1)在一个构造方法中使用了this或super语句,那么它必须作为构造方法的第一条语句.2)只能在构造方法(非其他实例方法)中用this()调用类的其他构造方法,且不能通过方法名来直接调用构造方法.如果调用父类构造方法也只能用super().3)this,super对象不能出现在静态方法中.publicstaticvoidmain(String[]args){this.play();//×}Java程序设计与开发2020/1/183.3多态多态是指一个名称具有多种功能。即同名但拥有不同的方法体。分重载(overloading)和覆盖(overriding)两种。重载,又称编译时多态,在一个类中通过不同参数个数或不同类型参数来体现。如:sum(bytea,byteb);sum(inta,intb);sum(doublea,doubleb);…Java程序设计与开发2020/1/18构造方法的重载构造方法重载的目的是以不同的方法对类进行初始化。例如,为类Person编写构造方法:publicPerson(){}publicPerson(Stringname){}publicPerson(intID){}publicPerson(Stringname,Str
本文标题:第3章 类和对象
链接地址:https://www.777doc.com/doc-3142781 .html