chapter03面向对象.ppt

上传人:sccc 文档编号:5378209 上传时间:2023-07-01 格式:PPT 页数:54 大小:262.01KB
返回 下载 相关 举报
chapter03面向对象.ppt_第1页
第1页 / 共54页
chapter03面向对象.ppt_第2页
第2页 / 共54页
chapter03面向对象.ppt_第3页
第3页 / 共54页
chapter03面向对象.ppt_第4页
第4页 / 共54页
chapter03面向对象.ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《chapter03面向对象.ppt》由会员分享,可在线阅读,更多相关《chapter03面向对象.ppt(54页珍藏版)》请在三一办公上搜索。

1、内容,面向过程与面向对象的区别类与对象的概念类的定义对象的创建和使用构造函数对象内存分析及引用传递this 关键字static 关键字类的继承方法的覆盖super 关键字,final 关键字抽象类接口多态抽象类与接口的区别Object 类package 和import初步Eclipse访问权限控制内部类单例模式初步,面向过程与面向对象的区别,面向过程装修:找水电师傅搞水电,找瓦匠铺地板,找刷漆匠刷墙面向对象装修:水电工作,瓦匠工作,漆匠工作面向对象对会将现实世界分割成不同的单元(对象),实现各个对象,如果完成某个功能,只需要将各个对象协作起来就可以。为什么要面向对象?因为现在信息系统越来越复杂

2、,我们程序要做的事情越来越庞大,越来越复杂。面相对象的三大特征 封装 继承 多态,类和对象的概念,对象(object)计算机语言对现实物体的描述。具有属性和方法。比如张三,李四,101班,102班。类(class)类是对具有共性事物的抽象描述,是在概念上的一个定义。通常根据名词(概念)来发现类,如在成绩管理系统中:学生、班级、课程对象和类的关系对象是类的具体和实现,类是对象的抽象。,101班,102班,班级,102班,101班,103班,类的定义,java中使用class关键字定义类public class Student/学号int id;/姓名String name;/性别char sex

3、;/地址String address;/年龄int age;操作Student.java,对象的创建和使用,new 创建出来,才能用Student zhangsan=new Student();System.out.println(id=+zhangsan.id);操作:创建OOTest01.java类是静态的概念是要预先定义的,对象是动态创建的使用对象的引用访问对象成员变量和成员方法,引用.方式访问操作:OOTest02.java,Customer.java引用.访问和get,set访问了解访问类的非静态方法,静态成员变量,成员变量,成员变量(全局变量),有称之为属性类型可以是基础类型,也可

4、以是引用类型作用域是全局的默认初始化,这和局部变量不一样,对象的创建和使用,内存分析解释对象创建和使用对象没有引用指向的时候被垃圾回收器回收操作分析Customer.java,OOTest03.java java值传递,引用类型和基础类型区别操作分析:OOTest04.java,OOTest05.java引用类型传递是堆内存地址基础类型传递的是字面值,内存分析,构造方法(构造函数,构造器,Constructor),构造方法主要用来创建类的实例化对象,可以完成创建实例化对象的初始化工作。构造方法调用完成,对象才算创建成功修饰符列表 构造方法名(形式参数列表)方法体;构造方法名称必须与类名一致构造

5、方法不具有任何返回值类型,即没有返回值,关键字void 也不能加入,加入后就不是构造方法了,就成了普通的方法了任何类都有构造方法,如果没有显示的定义,则系统会为该类定义一个默认的构造器,这个构造器不含任何参数,如果显示的定义了构造器,系统就不会创建默认的不含参数的构造器了。构造方法可以重载,和普通方法一致。操作:ConstructorTest01.java,User.java,练习理解构造方法,操作并内存分析:ConstructorPoint.java,this关键字,this是什么?this是一个内部引用类型。堆中每一个java对象都有一个this引用,保存的存地址执行自己本身。这叫内部引用

6、this可以用在那?this用在构造方法中,通过一个构造方法去调用另一个构造方法。必须出现在构造方法的第一行。例如:this(1970,1,1);/this(参数列表方式)调用另外一个构造方法编写ThisTest01.javathis能用在成员方法中,访问对象的其他成员方法和成员变量。编写ThisTest02.java当局部变量和成员变量重名的时候可以使用this 指定调用成员变量。编写ThisTest03.javathis.成员方法(成员变量)的时候,this代表了当前对象this不能用在静态方法中.编写ThisTest04.java,static关键字,static修饰的变量叫做“静态变量

7、”.static修饰的方法叫做“静态方法”.static还可以定义静态语句块.static定义的静态语句块在类加载阶段执行,并且只执行一次,并且是自上而下的顺序执行。操作:StaticTest01.java,static块和普通实例语句块对比,实例语句块(普通程序块)每一次调用构造方法之前会执行一次。实例语句块执行顺序也是自上而下。静态块是类加载的时候执行。回顾下java运行机制。自上而下执行,是在main方法之前操作分析:StaticTest02.java,static修饰方法,static修饰的方法叫做静态方法静态方法不用创建对象也能直接访问该方法。和对象无关使用类.。也可以使用引用.访问

8、该方法。使用引用.本质 引用.,所以推荐类.操作分析:StaticTest03.java静态方法中不能访问非静态资源一般情况下工具类中的方法大部分都是静态方法。,static修饰全局变量,static修饰的变量叫做“静态变量”所有某个类的实例共用一份静态变量,实际上就是方法区的一块内存。静态变量和实例引用没有关系静态变量访问和静态方法一样可以使用类名.,也可使用“引用.”。使用引用.本质还是使用类.,所以推荐类.操作分析:StaticTest04.java,关于代码顺序,public class StaticTest05/编译通过static int i=100;static System.o

9、ut.println(i);/非法向前引用/*static System.out.println(i);static int i=100;*/,类的继承,为什么要继承面向对象的三大特性:封装(封装细节),继承,多态继承是面向对象的重要概念,软件中的继承和现实中的继承概念是一样的继承是实现软件可重用性的重要手段,如:A 继承B,A 就拥有了B 的所有特性,如现实世界中的儿子继承父亲的财产,儿子不用努力就有了财产,这就是重用性使用了extends以后,代码可以复用正是因为有了继承,才可以有多态,才可以有抽象java 中只支持类的单继承,也就是说A 只能继承B,A 不能同时继承Cjava 中的继承使

10、用extends 关键字操作内存分析:SuperClass.java Sub.java Test01.java所有类的基类都是Obect,方法的覆盖(Override)(重写),回顾方法的重载条件:方法名称相同方法参数类型、个数、顺序至少有一个不同方法的返回类型可以不同,因为方法重载和返回类型没有任何关系方法的修饰符可以不同,因为方法重载和修饰符没有任何关系方法重载只出现在同一个类中为什么要方法覆盖因为子类某一方法行为和父类不一致,或者完全不同。,方法覆盖(Override),什么是方法覆盖(重写)如果父类方法无法满足业务需要,子类将父类的方法进行重新写一遍;子类重写以后,引用指向的如果是子类

11、对象的话,调用方法实际运行的是子类方法。方法覆盖的条件必须要有继承关系覆盖只能出现在子类中,如果没有继承关系,不存在覆盖,只存在重载 在子类中被覆盖的方法,必须和父类中的方法完全一样,也就是方法名,返回类型、参数列表,完全一样子类方法的访问权限不能小于父类方法的访问权限 子类方法不能抛出比父类方法更多的异常,但可以抛出父类方法异常的子异常父类的静态方法不能被子类覆盖父类的私有方法(private)不能覆盖覆盖是针对成员方法,而非属性编写Test01.java,Test02.java,Test03.java,super关键字,super关键字的作用调用父类的构造方法调用父类的成员方法super只

12、能用在非静态方法中和this一样为什么会有 super关键字因为子类必须要调用父类的构造方法,先把父类构造完成,因为子类依赖于父类,没有父,也就没有子有时需要在子类中显示的调用父类的成员方法super是什么?super不是引用类型,super中存储的不是内存地址,super指向的不是父类对象。super代表的是当前子类对象中的父类型特征。操作分析:Employee.java,Manager.java,Test01.java,super用在构造方法,一个构造方法第一行如果没有this(.);也没有显示的去调用super(.);系统会默认调用super();super(.);的调用只能放在构造方法

13、的第一行。super(.);调用了父类中的构造方法,但是并不会创建父类对象。操作分析:Account.java,DebitAccount.java,Test02.java,final关键字,final表示不可变的意思采用final 修饰的类不能被继承采用final 修饰的方法不能被覆盖采用final 修饰的变量不能被修改,final 修饰的变量必须显示初始化构造方法不能被final 修饰操作说明:Test01.java如果修饰的引用,那么这个引用只能指向一个对象,也就是说这个引用不能再次赋值,但被指向的对象是可以修改的操作说明:Test02.java,抽象类abstract和抽象方法,在jav

14、a 中采用abstract 关键字定义的类就是抽象类,采用abstract 关键字定义的方法就是抽象方法 抽象的方法只需在抽象类中,提供声明,不需要实现操作分析:A.java如果一个类中含有抽象方法,那么这个类必须定义成抽象类。但是抽象类可以没有抽象方法。如果这个类是抽象的,那么这个类被子类继承,抽象方法必须被重写。如果在子类中不复写该抽象方法,那么必须将此类再次声明为抽象类抽象的类是不能实例化的,就像现实世界中人其实是抽象的,张三、李四才是具体的。操作分析:A.java抽象内能有部分方法实现。操作分析:A.java,抽象类,抽象类不能被final 修饰抽象方法不能被final 修饰,因为抽象

15、方法就是被子类实现的操作分析:C.java为什么要有抽象方法和抽象类。往往父类需要定义特征行为,但是具体实现不明确,只有子类能明确。或者不同子类实现不一样,行为分化。其实就是多态,接口,接口我们可以看作是抽象类的一种特殊情况,在接口中只能定义抽象的方法和常量,在java 中接口采用interface 声明操作编写A.java接口中的方法默认都是public abstract 的,不能更改成private或者其他权限。继续编写A.java接口中的变量默认都是public static final 类型的,不能更改,所以必须显示的初始化.public static final是可以省略的继续编写试

16、验A.java接口不能被实例化,接口中没有构造函数的概念。不能new接口编写Testnew.java,接口,接口之间可以继承,但接口之间不能实现继续试验A.java接口中的方法只能通过类来实现,通过implements 关键字继续编写A.java如果一个类实现了接口,那么接口中所有的方法必须实现继续编写A.java一类可以实现多个接口继续编写A.java,为什么要有接口,明确了某一类的要做的事情。解决了java的单继承问题实现了可移植性这个地方大家简单理解,后续在学习Android项目过程中大家要着重理解这几个方面。,接口和抽象类区别,接口描述了方法的特征,不给出实现,一方面解决java 的单

17、继承问题,实现了强大的可接插性。接口完全没实现。抽象类提供了部分实现,抽象类是不能实例化的,抽象类的存在主要是可以把公共的代码移植到抽象类中。接口是完全抽象的接口中的常量全是public static final接口没有构造方法,抽象类是有构造方法面向接口编程,而不要面向具体编程(面向抽象编程,而不要面向具体编程)优先选择接口(因为继承抽象类后,此类将无法再继承,所以会丧失此类的灵活性),多态,多态同一个类中方法重载也是一种多态,这是一种静态多态我们更多说多态是说动态多态动态多态条件有继承(类之间)或者实现(接口和类之间)有方法覆盖或者实现父类引用指向子类对象操作分析Animal.java,C

18、at.java,Dog.javaTest01.java,多态,动态绑定动态绑定是指,在程序运行期间,jvm判断对象的实际类型,根据实际类型判断其相应的方法。内存分析动态多态向下转型(子类类型)父类引用可以预先使用instanceof判断语法:对象引用 instanceof 类类型返回值:boolean值if(a instanceof Cat)Cat c=(Cat)a;操作分析:Test02.java,类与类之间关系初步(了解,UML课程详解),泛化(继承)泛化关系,类和类之间的继承关系及接口与接口之间的继承关系 实现类对接口的实现关联语言 java 关联关系,类与类之间的连接,一个类可以知道另

19、一个类的属性和方法,在 程序中使用成员变量体现聚合关系 是关联关系的一种,是较强的关联关系,是整体和部分的关系,如:汽车和轮胎,它与关联关系不同,关联关系的类处在同一个层次上,而聚合关系的类处在不平等的层次上,一个代表整体,一个代表部分,在java 语言中使用实例变量体现合成关系 是关系的一种,比聚合关系强的关联关系,如:人和四肢,整体对象决定部分对象的生命周期,部分对象每一时刻只与一个对象发生合成关系,在java 语言中使用实例变量体现依赖关系 依赖关系是比关联关系弱的关系,在java 语言中体现为返回值,参数,局部变量和静态方法调用,UML类图表示,泛化,实现,关联,依赖,聚合,合成,Ob

20、ject类,Object类是所有java类的个基类,位于java.lang包下。如果在类的声明中未使用extends 关键字指明其基类,则默认基类为Object 类去看看API和源码吧所有类都继承了Object类的方法。、编写ObjectSub.java,TestObjectSub.java,toString方法和重写,SUN在Object类中设计toString方法的目的:返回java对象的字符串表示形式。默认字符串表示操作TestToString.javapublic String toString()return getClass().getName()/类名+Integer.toHex

21、String(hashCode();/hashCode 该字符串由类名加标记和此对象哈希码的无符号十六进制表示组成编写TestToString.java,toString重写,看看System.out.println(Object o);实际上调用的是String.valueOf(o),这个方法本质就是调用了o.toString.String类本身toString返回String本身对象不是默认形式实际中不满意的话,我们要重新这个toString方法。继续编写TestToString.java,finalize方法和垃圾回收器,垃圾回收器回收对象的时候调用。垃圾回收器(Garbage Coll

22、ection),也叫GC,垃圾回收器主要有以下特点:当对象不再被程序使用时,垃圾回收器将会将其回收垃圾回收器是jvm管理的,程序员不能手动调用垃圾回收是在后台运行的,我们无法命令垃圾回收器马上回收资源,但是我们可以告诉他,尽快回收资源(System.gc)垃圾回收器在回收某个对象的时候,首先会调用该对象的finalize 方法GC 主要针对堆内存编写并内存分析:TestFinalize.java,equals 与“=”,=的用法基础类型比较,字面值相等true,不相等false比较引用类型,比较的内存地址,必须是同一地址,即同一对象,才会true编写内存分析TestEquals01.javae

23、quals方法equals只能比较两个对象默认是比较两个对象内存地址地址public boolean equals(Object obj)return(this=obj);继续编写内存分析TestEquals01.java现实中很多情况需要重写equals继续编写分析TestEquals01.java,String类的比较,String类的Equals方法本身被重新查看源码编写内存分析TestEquals02.java“ABC”=“ABC”是true,比较特殊.知道就行记住我们比较字符串String一律用equals。字面上的字符序列完全一样,String对象就是一样,hashCode方法,对

24、象内存地址经过hash算法返回一个int值你可以继续理解成内存地址的int表示编写TestHashCode.java,包package,为什么要有包就是给类和接口按一定规则归类。便于管理。大家可以理解包是对类的目录管理解决类名冲突给类加包使用package关键字编写User.java,运行出错分析加入了包如何运行所以我们的class 文件必须放到和包一样的目录里才可以,这就是采用包来管理类,也就是采用目录来管理类,建立目录com/flm运行需要加 类全名:包名+类名:java com.flm.UserJVM从(classPath此时是当前路径开始找)com/flm/User.class之前的程

25、序我们都叫裸包,包package-import,引入不同包下的类使用import,同一个包下的类可以忽略操作TestPackage01.java,TestPackage02.java不import出错如果不使用import,引入的类必须使用类全名(包+类名)使用import,必须在package语句下面import还可以引入某包下面的一切使用import com.*(包含子包下的类)不过多讲,以后大家使用过程中自然加深理解了,常用的包,java.lang,此包Java 语言标准包,使用此包中的内容无需import 引入java.sql,提供了JDBC 接口类java.util,提供了常用工具类

26、java.io,提供了各种输入输出流所有类默认引入了java.lang.*,使用Eclispe了!,类多了要分包,分包以后写程序运行程序都很麻烦,必须使用更高级的编写程序工具Eclipse使用Eclipse,认真听了设置工作区建工程解释各个工作区快捷键操作:使用Eclipse建立第一个ecpliseTest工程,Eclipse使用,/*如何使用doc注释*这是我们的第一个eclipse建立的工程,第一个eclipse裸类*去看看工程目录文件夹吧*还能帮我们自动编译哦*运行也方便。控制台比那黑窗口要舒服吧*认识下各个工作区*/,Eclipse使用,*在用它建个包,建个User类,自动语法错误提示

27、很强大*自动引入包Ctr+Shift+O*语法错误提示好几个地方呢*很多快捷键可以用,比如Ctr+D删除一行*Ctr+Z撤销,Ctr+S保存,Ctr+C复制,Ctl+X剪切*试试上下左右光标怎么走的,在试试双击单词选中功能。选中单词快捷方法:光标游到单词中间,使用Alt+Shift+向上*至于快捷键,我们一边使用一边熟悉,老师会有意思口述,你们也可以问*author xucca*/,权限访问,java 访问级别修饰符主要包括:private、default、protected 和 public,可以限定其他类对该类、属性和方法的使用权限权限大小规律类内部同一包里子类其他地方操作:编写publi

28、c_protected_default_private工程三个类测试清楚。,内部类,一个类内部定义的类称之为内部类内部类主要分为实例内部类静态内部类局部内部类匿名内部类,内部类-实例内部类,实例内部类除了可以用public和default修饰以外还可以使用 private 和 protected 修,相当于实例成员变量。这和普通类不一样实例内部类会持有外部类的引用实例内部不能定义 static 成员,只能定义实例成员创建实例内部类的实例,外部类的实例必须已经创建操作:InnerClassTest01.java,内部类-静态内部类,静态内部类除了可以用public和default修饰以外还可以使

29、用 private 和 protected 修,相当于实例成员变量静态内部类可以定义实例成员和静态成员静态内部类可以访问外部的静态变量和静态方法,但不可以直接访问外部类的普通成员变量和成员方法,必须通过外部类的实例访问。(实例内部类外部类的成员变量都可以访问)静态内部类不会持有外部的类的引用,创建时可以不用创建外部类操作:InnerClassTest02.java,内部类-局部内部类,修饰符只能是default缺省局部内部类是在方法中定义的,它只能在当前方法中使用。和局部变量的作用一样,局部内部类和实例内部类一致,不能包含静态成员局部变量,在内部类中使用必须采用 final 修饰操作:Inne

30、rClassTest03.java,内部类-匿名内部类,是一种特殊的内部类,该类没有名字如何直接创建匿名内部类,如何直接创建匿名内部类作为实参操作:InnerClassTest04.java经验上WEB服务端开发一般用内部类比较少,但是Android客户端开发经常使用到,到家还是要掌握内部类。,单例模型初步,初步了解设计模式设计模式是 可以重复利用的解决方案设计模式的提出是在 1995 人,是由 4 为作者提出的,称为 GoF,也就是“四人组”设计模式从结构上分为三类:创建型、结构性、行为型关于设计模式项目中会有一天的专题,到时候在详细说几种设计模式:单例,工厂,代理,适配等等。最简单的创建型

31、设计模式-单例模式其中最简单的设计模式就是单例了,单例这种模式,尽量少用。单例模式有什么好处故名思意,单例只一个实例的意思。可以避免实例过多。避免内存溢出实例创建过程外部是看不到了,符合java封装思想可以避免数据不一致问题。单如果多线程访问,可能导致堵塞。,单例模式-定义类为单例模式,单例模式的三要素:在类体中需要具有静态的私有的本类实例构造方法必须是私有的提供一个公共的静态的入口点方法操作:SingletonTest01.java,内容,面向过程与面向对象的区别类与对象的概念类的定义对象的创建和使用构造函数对象内存分析及引用传递this 关键字static 关键字类的继承方法的覆盖super 关键字,final 关键字抽象类接口多态抽象类与接口的区别Object 类package 和import初步Eclipse访问权限控制内部类单例模式初步,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号