第-07-章-JAVA面向对象编程课件.pptx

上传人(卖家):晟晟文业 文档编号:4374599 上传时间:2022-12-03 格式:PPTX 页数:145 大小:4.06MB
下载 相关 举报
第-07-章-JAVA面向对象编程课件.pptx_第1页
第1页 / 共145页
第-07-章-JAVA面向对象编程课件.pptx_第2页
第2页 / 共145页
第-07-章-JAVA面向对象编程课件.pptx_第3页
第3页 / 共145页
第-07-章-JAVA面向对象编程课件.pptx_第4页
第4页 / 共145页
第-07-章-JAVA面向对象编程课件.pptx_第5页
第5页 / 共145页
点击查看更多>>
资源描述

1、第七章 JAVA面向对象编程面向对象的介绍 对象 面向对象的编程思想:以对象的抽象为导向,将现实世界的万事万物都抽象为程序中的对象对象是数据和操作的封装体,我们将一组具有相同数据和操作的对象抽象为一种类型类是对象的模板 在面向对象中有以下几个概念:类型(类):指一个名词概念,如:客人、菜品、厨师。引用(变量):指引用具体概念实例的代词,如:某人、特价菜。对象(东西):指具体概念的个体实例,如:张三丰这个人、一盘大盘鸡。如上三者之间的关系可以体现为:“今天的特价菜是一盘大盘鸡”。行为:方法多态:行为或引用,在具体情形下会发生变化的现象,比如:“一只动物”可以是“一匹马”、“一头驴”、“一只猴 子

2、”,多态的;“打”可以是“打酱油”、“打麻将”,“打人”,根据宾语发生变化,多态的封装:任何对象实例都是尽可能封装,减少暴露,它的实现细节对 你是透明的(看不到)。比如:只能看到汽车的壳子、轮 胎等,看不到发动机继承:后续章节来详细描述 类的抽象 对类的抽象就是抽象类的属性和方法,属性是类的静态特征,方法是类的动态行为。类是Java的数据结构,类封装了一组数据和对该组数据的一组操作的集合。简单描述世界物体和JAVA中类中的关系:public class Book long id;String isbn;String name;String authors;double price;把书抽象成了

3、一个类:对象的创建 类是一种数据类型的定义,对象是类的实例 生成类的实例(对象)需要使用以下语法:Book book=new Book();使用对象名来访问对象的属性和方法,使用如下语句:book.name=鬼吹灯;1public static void main(String args)23book=new Book();4book.name=鬼吹灯;5 System.out.println(book.name);6book=new Book();7book.name=西游记;8 System.out.println(book.name);9 1public static void main

4、(String args)2Book book;34book.name=鬼吹灯;5 System.out.println(book.name);6book=new Book();7book.name=西游记;8 System.out.println(book.name);9 1public static void main(String args)2Book book;3book=new Book();45 System.out.println(book.name);6book=new Book();7book.name=西游记;8 System.out.println(book.name);

5、9 1public static void main(String args)2Book book;3book=new Book();4book.name=鬼吹灯;5 System.out.println(book.name);67book.name=西游记;8 System.out.println(book.name);9 1public static void main(String args)2Book book;3book=new Book();4book.name=鬼吹灯;5 System.out.println(book.name);6book=new Book();78 Syst

6、em.out.println(book.name);9 public class BookDemo public static void main(String args)Book book=new Book();System.out.println(book.id);System.out.println(book.name);System.out.println(book.price);public static void main(String args)Book book=null;System.out.println(book.name);构造器 构造器构造器主要是用来描述对象的创建过

7、程 构造器 JAVA中的构造器也叫构造方法,构造方法和一般普通定义的方法有很大的区别,主要如下:构造器如下代码中定义了一个Point类,用来描述一个点的类:public class Point int x;int y;public Point(int x,int y)this.x=x;this.y=y;构造器public class PointDemo public static void main(String args)Point p=new Point(3,5);Point p2=new Point(4,5);System.out.println(p.x+:+p2.x);public c

8、lass Point int x;int y;public Point(int x,int y)this.x=x;this.y=y;构造器 构造器 构造器 构造器 构造器 构造器 构造器使用构造方法,我们需要了解以下特性:1.当我们在程序中使用new运算符生成对象时,系统就会自动调用 类的构造方法。2.如果程序员没有明确的定义构造方法,则系统会自动为该类添加 默认的无参构造方法。3.根据生成对象时传递的参数来决定调用哪个构造方法。this关键字 this是对当前对象的引用,是运行期间当前对象本身。public class PointDemo public static void main(St

9、ring args)System.out.println(p.x+:+p2.x);public class Point int x;int y;public Point(int x,int y)this的使用方法:1.可以使用this明确的访问当前对象的属性或者方法,类似于我 2.this()可调用本类的其他构造器,可以使用构造器的重用简化代码的实现 注意:this()必须写在构造器的第一行 public class Point int x;int y;public Point(int x,int y)this.x=x;this.y=y;public Point(int x)this(x,x)

10、;构造方法重载 public class Point int x;int y;public Point(int x,int y)this.x=x;this.y=y;public Point(int x)this(x,x);一个类中可以定义多个同名但参数类型不同的方法,这种语法叫做方法的重载方法重载就是方法名字一样但是方法参数不同,方法参数不同包括参数类型或者参数个数不同构造方法重载就是构造方法中的参数个数或者类型不同 方法重载 上述代码中定义了两个构造方法,第一个构造方法中有一个int类型的参数,第二个构造方法中有两个int类型的参数,这个就叫做构造方法的重载public class Poin

11、t int x;int y;public Point(int x,int y)this.x=x;this.y=y;public Point(int x)this(x,x);默认构造器 Java类中一定有构造器,当使用new关键字时,JVM必定会调用构造器创建对象如果类中没有声明任何构造器,javac会自动提供一个无参数的构造器如果用户定义了构造器,无参数构造器就不会被自动提供,如果要使用无参数构造器,需要自己定义 方法重载 重载:方法名一样,参数不一样重载体现了功能的多态,重载的方法经常互相重用 方法签名 方法签名就是,在类中定义方法时应注意以下几点:1.方法签名=方法名+参数类型列表 2.J

12、ava 类中不能存在相同方法签名的方法 3.方法重载:方法名一样,参数不同;方法签名不同的方法 方法调用原则 Java方法调用原则:1.方法签名(方法名+参数列表)2.“就近原则”方法中参数的传递规则 java方法参数的传递规则:基于值的传递Java方法参数传递只有一种方式,基于值的传递,是变量值的复制,基本类型就是其中值的复制,引用类型是引用值(地址)的复制。java方法参数的传递规则:基于值的传递Java方法参数传递只有一种方式,基于值的传递,是变量值的复制,基本类型就是其中值的复制,引用类型是引用值(地址)的复制。圆 一个圆包含圆心和半径两个属性,定义一个圆,要求:1.提供合理的构造器2

13、.提供方法,计算当前图形的面积3.计算当前图形是否包含指定的点,方法名 contains(Point)4.计算当前图形是否包含坐标为x,y的点,重载方法 contains(int x,int y)案例描述 圆的实现只需要通过指定圆心的(x,y)值,并指定圆的半径r即可。案例分析 访问修饰符 Java中的访问控制符,是修饰Java中类、属性、方法的访问可见范围 1.public修饰,在任何地方都能访问2.protected修饰,在类内部、同一个 包、子类中能访问3.default修饰,在类内部和同一个 包中可以访问(不建议用)4.private修饰,仅限当前类内部访问 在用访问修饰符时要注意以下

14、几点:1.方法也可以用访问控制符修饰,一般为private的表示只在类内部 调用,外部不可见2.声明属性和方法尽可能私有。这样才能做到尽可能的封装3.提供适当的属性访问方法,适当的开放属性的访问4.一个源文件可以有多个类,但是只能有一个public类,文件名要与 public类一致.如果有其他类,就只能是默认default修饰5.不建议使用非公有类。就是说所有类都应该是公有的,并且一个 源文件一个类。继承 假如现在要定义两个类:教师Teacher类,包含:姓名、年龄、性别、工资 学生Student类,包含:姓名、年龄、性别、成绩 public class Teacher String name

15、;int age;String sex;double sal;public class Student String name;int age;String sex;int score;教师类学生类 public class Person String name;int age;String sex;Person人类public class Student extends Person double score;学生类Studentpublic class Teacher extends Person double sal;教师类Teacher 在Java中通过extends关键子继承一个类被

16、继承的称为父类,继承的类称为子类如果子类继承了一个父类,就继承了父类中的非私有属性和方法在Java中只支持单继承,一个子类只能有一个父类,但是一个父类可以有多个子类如果我们没有明确声明父类,则默认父类是java.lang.Object类,因此Object类是Java中所有类的直接或间接父类 方法重写 在子类中定义和父类中同名且同参的方法,这种语法叫做方法的重写 在子类中定义和父类中同名且同参的方法,这种语法叫做方法的重写 1.子类方法与父类方法同名。2.子类方法与父类方法同参,同参是指参数的个数,类型和顺序都 相同。3.子类方法的访问控制修饰符不能比父类方法的更封闭。4.子类方法声明抛出的异常

17、类型不能比父类方法的更宽泛;异常类 型的个数不能比父类方法的更多。继承中多态的体现 关于多态的概念,我们可以理解为两层含义:1.方法的多态:若一个类中定义有多个方法的重载(同名不同 参),我们在调用这些方法时,通过传递不同的参数来调用 不同的方法。方法的重写也是多态的体现。2.对象的多态:一个对象可以有多种形态,既可以当作本类的 对象来看,也可以当作其父类对象来看。我们可以把一个对 象当作他的父类对象来看,也就是定义父类的引用得到子类 的对象 引用类型转换 Java中引用类型转换:1.向下转型(隐式/自动类型转换):小类型到大类型的转换 2.向上造型(强制类型转换):大类型到小类型的转换 为了

18、避免出现转换异常错误,Java中提供了instanceof运算符,用来检查引用对象的类型,经常与“引用类型强制转换”配合 继承中的构造器 1.子类构造器一定调用父类构造器2.子类构造器默认调用父类无参数构造器3.super()表示调用父类构造器4.使用super()调用父类构造器,必须写在子类构造器第一行 在编程时要注意:1.如果父类没有无参数构造器,就必须在子类中明确指定调 用父类的有参数构造器2.编程建议:所有的类都提供无参数构造器!减少继承时候 的麻烦 关键字出现的位置/举例/举例代表的含义this构造方法的第一行/this()调用本类其他构造方法方法代码的其他位置/this.name访

19、问当前对象的成员super构造方法的第一行/super()调用父类构造方法方法代码的其他位置/super.name访问父类对象的成员1.任何构造方法的第一行必须是this(XXX)或者super(XXX)的调用,如 果我们没有明确的调用,则系统会默认加上super()的调用。2.this()和super()只能出现在构造方法的第一行的位置。对象的实例化过程 第一步:检查并加载类 首先检查内存中Koo有没有加载,如果Koo没有加载会加载Koo并加载父类Foo。public class ClassInit public static void main(String args)Koo k =new

20、 Koo();System.out.println(k.a+,+k.b);int a=1;public Foo()a=3;int b=2;public Koo()a=4;b=5;第二步:在内存堆中分配对象空间 先递归的分配父类型空间(Foo)int a=0(int类型空间,默认值为0)再分配子类型空间(Koo):int b=0 第三步:进行属性的赋值 第四步:递归调用父类的构造器 第五步:调用本类构造器 1.在创建类之前,检查类是否加载,如果没有加载就加载这个类,在这个类加 载之前要加载所有父类。2.Java运行时采用的策略:懒惰式加载(按需加载),如果第一次用到就加载,只加载一次。3.在内存

21、堆中分配对象空间。递归分配所有父类和子类属性空间。4.属性默认自动初始化。自动初始化为“0”值。5.进行属性的赋值。6.递归调用父类构造器。(默认调用父类无参数构造器!)7.调用本类构造器。1.在创建类之前,检查类是否加载,如果没有加载就加载这个类,在这个类加 载之前要加载所有父类。2.Java运行时采用的策略:懒惰式加载(按需加载),如果第一次用到就加载,只加载一次。3.在内存堆中分配对象空间。递归分配所有父类和子类属性空间。4.属性默认自动初始化。自动初始化为“0”值。5.进行属性的赋值。6.递归调用父类构造器。(默认调用父类无参数构造器!)7.调用本类构造器。JAVA Bean规范 属性

22、的静态绑定 静态绑定:Java根据引用变量类型查找属性 本案例在业务上不合理,在开发过程中极少会遇到子类和父类定义同名属性的情况。动态绑定:java根据实际的对象查找方法 在Java中将这种建议的规范称之为“JavaBean规范”JavaBean的类也称为:POJO类(Plan Old Java Object)JAVABean简化规范:1.必须有包(package)2.Java类,具有无参数构造器3.有用getXxx()和 setXxx()声明的Bean属性4.必须实现序列化接口(注:在学习IO的时候具体学习)static 关键字 修饰属性 修饰方法 修饰内部类 修饰代码块 属于类的全体实例的

23、变量,只有 在类的初始化,存储在中 访问方式:使用访问,如:System.out static修饰的属性 static修饰方法属于类的方法,使用类名调用一般用来表示工具方法或工厂方法,比如:Math.sqrt(.);静态方法不能访问属于对象的资源(实例变量、实例方法)静态代码块属于类的代码块,在类加载期间加载,只执行一次,一般用来加载一些静态资源。如:加载配置文件、图片、音频等。final关键字 final作用修饰类修饰方法修饰变量 用final修饰的类不能再被继承 String、Integer、Long、Character等包装类、Math都是final类final修饰类 final修饰类

24、在实际项目开发中,原则上不允许使用final类,Spring,Hibernate,Struts 2,这些框架使用了动态继承代理技术,使用final的类会影响动态代理技术 的实现。final修饰方法Final修饰方法,修饰的方法不能再被重写;在实际项目开发中,原则上不允许使用final方法!原因也是影响动态代理技术的实现。final修饰变量final修饰变量:1.final可以修饰局部变量 2.final可以修饰方法参数 3.final可以修饰成员变量 修饰的变量初始化以后不允许再修改了。final static1.Java使用final static修饰的变量作为常量。2.一般要求常量名都是大

25、写字母。抽象类 抽象类是一种特殊的数据类型;一般来讲,抽象类都会包含抽象方法。抽 象 类:由abstract关键字声明 抽象方法:由abstract修饰的方法,抽象方法即只有方法 的定义,没有方法体实现,用一个分号结尾抽象类 抽象类1.抽象类不能实例化。2.abstract 修饰抽象方法,抽象方法不能有方法体。3.包含抽象方法的类,一定是抽象类,使用 abstract修饰。4.抽象类不能直接实例化,使用抽象概念可以声明引用变量。5.抽象概念的引用变量可以引用具体的子类实例。6.抽象类只能被继承,子类需要实现抽象类的抽象方法。接口 接口接口可以看成一种特殊的抽象类,接口具有如下特征:1.接口中所

26、有方法都是抽象方法。2.接口的所有属性都是静态常量(static final)。3.接口没有构造方法。4.一个类可以同时实现多个接口,也可以不实现任何接口。接口的意义1.对单一继承关系的补充2.将服务的使用者和提供者分离,降低系统耦合3.面向接口编程 栈的抽象 案例描述 栈是一种常用的数据结构,其特点是存储数据时“先进后出”。写一个类用来描述栈这种数据结构,要求底层使用数组存储数据,并给出相应的进栈和出栈的方法452783 案例分析 此案例是一个典型的数据抽象问题,我们需要抽象出栈的数据结构,并定义一个类来实现它。452783 Object data;int top;public void p

27、ush(Object obj);public Object pop();public int getCount();人类的抽象 案例描述 写一个类Person,代表人类。包含属性:String name;Calendar birthday;boolean gender;Person partner。为Person类写一个marry(Person p)方法,代表当前对象和p结 婚,如若可以结婚,则输出恭贺信息,否则输出不能结婚原因。要求在另外一个类中写一个主方法,来测试以上程序。下列情况不能结婚:(1)同性;(2)未达到结婚年龄,男22,女20;(3)某一方已婚 案例分析 该案例主要练习类的自引

28、用的实现,即某个类引用本 类的对象作为其属性 在marry方法中做相应的结婚条件的判断 即时战略游戏的类结构设计 使用面向对象的思想设计一个即时战略游戏的类结构人物:工兵、机枪兵、护士 。(生命值、攻击力.)建筑:指挥中心、兵营、供应站。(生命值、消耗资源值)功能:可移动、可攻击、有生命玩家:名称、人数、资源值、人口对象、建筑对象.案例分析使用面向对象的思想设计一个即时战略游戏的类结构,主要类和接口如下:1.可移动的接口(Mobile)2.可攻击的接口(Attackable)3.有生命的接口(LifeThing):标记接口,没有任何方法。实现该接口的 对象可以被攻击。案例分析4.人口类(Per

29、son 抽象类)可移动、可攻击、有生命的接口。生命值(lifeValue),攻击力(attackPower),占用 供给数(needSupportting),消耗资源数(needResource)子类:(Sapper 扩展方法:创建建筑,采集资源)(GunMan)(Nurse 扩展方法:疗伤(cure)案例分析5.建筑类(Construction 抽象类)有生命的接口 :生命值,消耗资源值 子类:CommandCenter),扩展方法:创建农民 扩展方法:创建机枪兵 :final static int MAX_SUPPORTTING/能供应的供给数 案例分析6.玩家类(Player)玩家名称,

30、玩家最大人口数,玩家当前人口数,玩家资源值,玩家所拥有的人口对象,玩家所拥有的建筑对象。内部类 成员内部类静态内部类局部内部类匿名内部类 将一个类定义在另一个类的内部,这种语法叫做内部类 成员内部类1.每一个成员内部类的对象都对应一个外部类对象;一个外部类对象可以有多个内部类对象;2.在成员内部类可以访问外部类的私有属性和方法,可以通 过 OuterB.this.来访问,但不是必须的。静态内部类1.静态内部类:作为外部类的类成员存在的2.修饰符和成员内部类一样3.静态内部里不能访问外部类的非静态成员,只能访问静态成员4.声明:外部类名.内部类名5.实例化:new 外部类名.内部类构造函数()6

31、.静态内部里可以定义静态成员 局部内部类1.在方法中定义甚至在代码块中定义的;使用最少的一种内 部类;相当于局部变量,不能用访问控制修饰。2.局部内部类可以访问外部类的成员变量,但只能访问 final 类型的局部变量 匿名内部类1.没有类名,没有构造方法2.匿名内部类是编程中用的最多的一种内部类 使用内部类构建链表 链表由一系列结点(链表中每一个元素称为结点)组成。:一个是存储数据元素的数据域,一个是存储下一个结点地址的指针域。案例描述 定义一个,用来实现链表这种数据结构。要求提供的方法。只需实现单向链表即可,其逻辑结构如下图所示:该链表由若干连接而成,每个节点包含,链表的的数据域存放链表中。案例分析 为了完成链表的定义,我们需要定义出链表的;节点类可以定义为链表类的内部类;在节点对象中并不需要得到一个链表对象的引用,所以这 种内部类可以定义为静态内部类。Thanks!关注达内科技官方微信 获取最新资讯WWW.TEDU.CN

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第-07-章-JAVA面向对象编程课件.pptx)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|