《【教学课件】第3章面向对象程序设计.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第3章面向对象程序设计.ppt(55页珍藏版)》请在三一办公上搜索。
1、2023/8/6,1,第3章 面向对象程序设计,面向对象程序设计的基本思想类、域和方法继承性多态性包封装性接口内部类,2023/8/6,2,面向对象程序设计的基本思想?,面向对象程序设计(OOP)传统:面向过程对象例子汽车:车轮、发动机、方向盘、座椅、车门和窗狗:动物的子类将数据(属性)和方法(行为或功能)封装到类(classes)中对象(objects):类的实例或类本身三个基本特性:封装性、继承性和多态性,2023/8/6,3,本章总体纲要,面向对象程序设计的基本思想类、域和方法继承性多态性包封装性接口内部类,2023/8/6,4,类的定义,类的定义格式如下:类修饰词 class 类名 e
2、xtends 父类名 implements 接口名称列表 类体,2023/8/6,5,多个类组成的程序,很多Java程序需要多个类完成一项任务一个文件一般只含有一个类每个文件的长度一般不要太长最长一般不要超过2000行,2023/8/6,6,方法定义,与C+程序不同的是:每个方法都必须隶属于某个类方法定义的格式:方法修饰词 返回类型 方法名(方法的参数列表)方法体 返回类型:返回数据的数据类型除了构造方法,一般要求返回类型:要么为void,要么为某种数据类型int、byte、float或String最多只能返回一个值方法名:任何一个合法的标识符参数列表:用逗号(,)分隔开,2023/8/6,7
3、,返回控制,如果没有值返回:return;/退出该方法或者遇到该方法的最后一个“”,则退出该方法如果有值返回:return 表达式;/退出该方法返回该表达式的值,2023/8/6,8,构造方法,构造方法在创建新的实例对象时起作用构造方法通常用来初始化实例对象,例如:初始化成员域或设置工作环境构造方法的特点:与类同名没有返回值可以含有多种构造方法(重载)但必须具有不同的参数列表,2023/8/6,9,默认的构造方法,如果没有显式地定义类的构造方法,则系统会为该类定义一个默认的构造方法。该构造方法不含任何参数。这个默认的构造方法首先调用其父类的不含任何参数的构造方法,然后初始化新生成的实例的各个成
4、员域变量默认值:基本数值类型:0;boolean:false;引用数据类型:null最好自己写构造方法一旦在类中定义了构造方法,系统就不会再创建这个默认的不含参数的构造方法。,2023/8/6,10,域,别名:成员变量域Java成员变量C+.类的成员:域和方法,2023/8/6,11,成员变量(域)和 局部变量,在方法内部定义的变量称为局部变量局部变量只能在方法内部使用,2023/8/6,12,变量的作用域范围,作用域范围:程序中能够使用该变量(域与局部变量)的范围分类:类作用域范围和块作用域范围,2023/8/6,13,类作用域范围,从类定义的第一个“”开始,到 最后一个“”结束超出类的范围
5、,类的成员方法不能直接通过它的名称进行访问例如:成员域,2023/8/6,14,块作用域范围,从变量声明之处,到该块的最后一个“”例如:局部变量与成员方法的参数如果局部变量名与成员域名相同,则成员域会被隐藏可以通过关键字this进行访问,如:this.域名,2023/8/6,15,本章总体纲要,面向对象程序设计的基本思想类、域和方法继承性多态性包封装性接口内部类,2023/8/6,16,继承性,继承性 软件重用的一种方法根据已有的类创建新的类采纳了旧的类的属性(域)及其行为(方法)增加了新的能力子类继承法父类子类增加了新的成员域或新的成员方法有时可以理解成:(但不绝对!)子类对象是一种特殊的父
6、类对象,2023/8/6,17,继承性的实现,采用关键字extendspublic class J_HelloApplet extends Applet/End of class:J_HelloApplet,2023/8/6,18,关键字:instanceof,运算符:instanceof例如:if(p instanceof Circle)上面的条件为 true,当且仅当引用p所指向的对象是类Circle(或其子类)的实例对象,2023/8/6,19,多重继承,在有些计算机语言中,允许一个类有多个直接父类。这种继承关系称为多重继承Java不支持多重继承Java 允许一个类有多个直接父接口(in
7、terface),2023/8/6,20,本章总体纲要,面向对象程序设计的基本思想类、域和方法继承性多态性包封装性接口内部类,2023/8/6,21,多态性的种类,静态的多态性重载动态的多态性覆盖,2023/8/6,22,静态的多态性(重载),在编译时就能够被识别针对的是同一个类内的同名方法例如:public int square(int x)return x*x;public double square(double x)return x*x;,2023/8/6,23,识别重载方法,识别标志:参数的个数、类型、数据类型的排列顺序返回值不能做为识别的标志,2023/8/6,24,动态多态性(覆
8、盖),在程序运行时才被识别重写父类的方法要求相同的声明例如:public class J_HelloApplet extends Applet public void paint(Graphics g)g.drawString(Hello Applet.,25,25);/End of method:paint/End of class:J_HelloApplet,2023/8/6,25,动态多态性(覆盖),用父类的引用指向子类的对象在运行时,程序可以“正确”识别并调用子类的方法,2023/8/6,26,本章总体纲要,面向对象程序设计的基本思想类、域和方法继承性多态性包封装性接口内部类,2023
9、/8/6,27,包,可以将一组相关的类或接口封装在包(package)里,从而更好地管理已经开发的Java代码包含组织类与接口的目录结构方便程序重用,2023/8/6,28,创建包,创建public类如果类不是public,则通常只能在同一包内使用(或派生子类)选取一个包名(package)并在源程序中增加一条package语句编译,生成.class文件(放在相应的目录下)通过import语句,加入到其它程序中命名规则:Internet域名的逆序+其它名一般全部采用小写ASCII字母例如,package;package;,2023/8/6,29,注意事项,建包的package语句必须是源程序文
10、件的第一条语句,2023/8/6,30,Java 包,Java系统提供了很多已经写好的包数学计算、输入/输出、字符串操作尽量利用已有的包、避免重复工作使用包中类利用import 语句指定类的位置例如:import;,2023/8/6,31,包,包java.lang包java.util,2023/8/6,32,本章总体纲要,面向对象程序设计的基本思想类、域和方法继承性多态性包封装性接口内部类,2023/8/6,33,类成员的封装性,成员(域或方法)的访问控制方式:1)public2)private3)protected4)default(缺省方式),2023/8/6,34,成员的访问控制方式:p
11、ublic,则该成员可以被任何类中的方法访问表明对外开放的方式少量(或者没有)public 域部分 public 方法,2023/8/6,35,成员的访问控制方式:private,目的:隐藏具体的实现细节只有同一个类的成员方法才能访问私有成员域常常是private 采用 public“get”方法读取数据采用 public“set”方法写数据,2023/8/6,36,成员的访问控制方式:protected,介于public 和private之间同一个包内的所有类的所有方法都能访问该成员如果不在同一个包内的类的方法要访问该成员,则该类必须是该成员所在的类的子类,2023/8/6,37,成员的访问
12、控制方式:default(缺省方式),只有在同一个包内的类的方法才能访问该方法,2023/8/6,38,类成员封装性总结,2023/8/6,39,类的访问控制方式,两种方式:public或默认方式(default)默认方式只有同个包内的类的才能访问,2023/8/6,40,本章总体纲要,面向对象程序设计的基本思想类、域和方法继承性多态性包封装性接口内部类,2023/8/6,41,接口(interface),接口(interface)就象是一种特殊的类成员方法:abstract成员域:final和static接口(interface)中所有的方法和域必须都是 public的每个接口一般定义在一个
13、.java 文件中,2023/8/6,42,实例,例1:通过接口定义一些常量public interface Constantspublic static final int ONE=1;public static final int TWO=2;public static final int THREE=3;/End of interface:Constants例2:interface J_Shape/This method cannot have a body.public abstract void mb_draw(Graphics2D g);/End of interface:J_Sh
14、ape,2023/8/6,43,注意事项,接口中成员方法的默认方式是 public 和 abstract接口中成员域的默认方式是public、static和final,2023/8/6,44,优点,一个类可以继承多个接口例如:,public class A extends B implements C,D,2023/8/6,45,总结:接口的使用方法,一个类实现接口(interface)多个接口采用逗号分隔类中必须定义接口中的所有方法这些方法必须具有相同的声明方式,2023/8/6,46,本章总体纲要,面向对象程序设计的基本思想类、域和方法继承性多态性包封装性接口内部类,2023/8/6,47
15、,内部类,定义在其它类内部的类称为内部类内部类有些类似于类的成员域或成员方法,2023/8/6,48,实例:J_Test.java,/J_Test.java:Jun-Hai Yong,2003class J_A class J_B void mb_f1()System.out.println(mb_ f1();/End of method:J_B:mb_f1()/End of class:J_B void mb_f2()J_B b=new J_B();return b;/End of method:J_A:mb_f2()/End of class:J_A,2023/8/6,49,匿名内部类,没
16、有类名常常用在图形用户界面设计(GUI)中,进行各种事件处理例如:鼠标事件、按钮事件和键盘事件等,2023/8/6,50,匿名内部类,省略关键字class、extends和implements,并且没有修饰词(如:public、protected等等)匿名内部类优点:可能简单、直接匿名内部类缺点:可能很难阅读太长的类不要写成匿名内部类匿名内部类合理利用,可能可以稍微简化程序;如果误用,则有可能很理解,2023/8/6,51,实例,import.*;/.jButton1.addActionListener(new ActionListener()public void actionPerform
17、ed(ActionEvent e)/Do something.);/./Interface:/void actionPerformed(ActionEvent e),import.*;class MyActionListener implements ActionListener public void actionPerformed(ActionEvent e)/Do something./.jButton1.addActionListener(new MyActionListener();.,2023/8/6,52,本章小结,面向对象程序设计的基本思想类、域和方法继承性多态性包封装性接口内部类,2023/8/6,53,作业,习题3.6习题3.8,2023/8/6,54,引用声明,本课件来源于(或参考了)下面的书及其课件:雍俊海.Java 程序设计.北京:清华大学出版社,2004.,2023/8/6,55,参考文献,本课件的参考文献与下面书的参考文献相同雍俊海.Java 程序设计.北京:清华大学出版社,2004.,
链接地址:https://www.31ppt.com/p-5658667.html