《面向对象编程》PPT课件.ppt
《《面向对象编程》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《面向对象编程》PPT课件.ppt(106页珍藏版)》请在三一办公上搜索。
1、第三章 面向对象编程,学习目标掌握:掌握创建和使用类对象、使用包的基本方法。理解:理解面向对象程序设计的基本思想和面向对象的概念。了解:类的多态,接口的声明及实现方法。重点明确各种修饰符的作用,理解继承和复用的概念理解父类和子类学会Java类的定义和对象的创建。难点理解多态性是如何扩充和维护系统性能类多态的实现。,本讲要点,面向过程和面向对象,面向过程程序设计示意图 面向对象程序设计示意图,1-4,3.1面向对象的思想,面向对象的基本概念 对象是具有某种特性和某种功能的东西。将同一种类型的对象归为一个类。类是对象的抽象,对象是类的实例。类的特征和行为分别命名为属性和方法,类是对象的模板,而对象
2、是类的实例;共性与个性的关系,是抽象与具体的关系。,例如:电视机类 属性:尺寸 颜色 型号 方法:打开 关闭 选择节目,3.1面向对象的思想,一个类中定义的方法可被该类的对象调用,对象方法的每一调用被称作发送一个消息message给对象。对象间是相互独立,通过发送消息相互影响。一个消息由三部分组成:(1)消息目标对象;(2)执行方法的名字;(3)执行方法所需要的参数(parameters)。,封装性封装性就是把对象的属性和方法结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节。对外形成一个边界或者说形成一道屏障,只保留有限的对外接口使之与外部发生联系。继承性特殊类的对象拥有其一般类的全部属性
3、与方法,称作特殊类对一般类的继承.一般类为父类(superclass,超类),特殊类为子类(subclass)。多态性对象的多态性是指在一般类中定义的属性或方法被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。,面向对象的特点,面向对象三大机制:封装:隐藏内部实现继承:复用现有代码多态:改写对象行为,3.2类,类由数据成员和方法组成。类封装了一类对象的状态和方法。,汽车(类)品牌型号颜色-加速与减速设计转向设计刹车设计,类的声明,类的修饰符用于说明类的特征和访问权限,包括public,abstract,final,friendly。public:表示此类为“公共”类;abstract
4、:表示此类为“抽象”类;final:表示此类为“最终”类.类名是Java标识符。通常,类名的第一个字母为大写。,一个Java程序可以定义很多个类,但只能有一个public类,程序的主类必须是public类。每个程序都从主类开始执行。,class,extends,implements都是Java关键字。class表明定义类。extends表明目前定义的类是父类继承而来的子类,该父类必须存在。implements表明类要实现某个接口。各接口名之间用逗号“,”分隔。类体包含:实现类功能的Java语言程序代码、成员变量、成员方法。类的成员变量定义:修饰符 数据类型 成员变量=初值;成员变量的修饰符 访
5、问控制修饰符public、protected、private;存在修饰符static、abstract和final。,类的声明,其中:final:表示该变量不能再被修改,称为常量。例如:final int a=3;static:表示该变量时静态变量,也称为类变量。属于这个类的所有对象的变量。而实例变量只属于某个对象。通过“类.变量名”和“对象.变量名”引用。默认修饰符,如果某个成员变量没有设置访问权限,允许类自身以及在同一个包中的所有类的变量访问。,class Exampleint i;static int j;public static void main(String args)Examp
6、le a=new Example();a.j=3;Example.j=2;a.i=4;Example.i=5;,类的成员方法 定义的一般形式为:方法修饰符()方法体 成员方法修饰符 主要有public、private、protected、final、static、abstract和synchronized七种。成员方法的返回值类型 方法返回值用return语句来实现,返回的数据类型必须与方法说明中的方法返回值类型一致;如果不需要返回值,则其返回值类型被说明为void;,类的声明,final:为最终方法,不能在其所在类的子类中被重载,只能被继承,不能被重写。static:不需要初始化该方法所在的
7、类。也不能被它的子类所重载。在一个static方法中,只能访问被定义为static的类变量和类方法。abstract:抽象方法,只有方法说明,没有方法体。在它所在的类的子类中具体实现。抽象方法所在的类称为抽象类。synchronized:同步方法,在多线程中使用。,方法名 成员方法名是Java语言合法的标识符。参数列表 成员方法的参数列表是由逗号分隔的类型及参数名组成,是可选项。方法体 方法体是一个方法定义的主要部分,包含了所有实现方法功能的Java语言程序代码,方法体用“”括起来。例3-2:源程序名为TestCir.java;定义一个方法,其功能是根据参数r的大小,返回圆的面积。运行结果:,
8、类的声明,public class TestCir public static void main(String args)/main方法 double k;TestCir mj=new TestCir();k=mj.area(5);System.out.println(k);public double area(int r)/定义area方法,带有一个参数r final double PI=3.14;/定义常量PI为3.14 return PI*r*r;/由r的值,计算面积,返回面积值,类的声明,项目任务:,定义一个正方形,它的数据成员包括长和宽,成员函数包括设置长和宽的值,求长方形的面积。
9、在主方法中定义正方形对象,求长是5,宽是3的面积。然后再求长是8,宽是4的面积。定义一个职员类Emplyee(姓名,年龄,性别,薪水),一个显示信息的方法,并输出职员信息。,构造方法,构造方法是一种特殊的方法,其名称与类名相同。Java语言中每个类都有构造方法。构造方法的特点构造方法没有返回值类型,没有void。其修饰符只能是访问控制修饰符,即public、private、protected中的任一个。构造方法不能从父类中继承。构造方法可以重载,一个类可以有任意多个构造方法。不同的构造方法根据参数的不同状态来选择合适的构造方法。构造方法不能直接通过方法名引用,必须通过new运算符。在构造方法中
10、调用当前类和其父类的构造方法,但必须在方法体的第一条语句。,在前一个任务的基础上,构造3个构造函数。,this对象本身,表示对象本身在不同方法中表示调用这个方法的对象在构造方法中表示新创建的对象作用使用this访问域及方法使用this解决局部变量与成员变量同名在构造方法中,用this调用另一个构造方法 必须放在第一句不能通过this引用类变量、类方法,class Person String name;public void ex1(String name)/name=name;this.name=name;public void ex2()ex1(“XMJ”);/?this.ex1(“XMJ”
11、);/?/局部变量与成员变量同名,public class A public A(int i)public A(int i,int j)this(5);/第一句/调用另一个构造方法,super直接父类,使用super访问父类被子类隐藏的同名的成员使用父类的构造方法super()必须放在第一句,class A int i;void value()i=10;System.out.println(i);,class B extends A int i;void value()i=20;super.value();System.out.println(i);System.out.println(sup
12、er.i);,this与super的区别 this使用当前类的构造方法,super使用其父类的构造方法。this用以指代一个对象自身,它的作用主要是将自己当成对象作为参数,传送给别的对象中的方法;super为了访问父类的成员变量或方法,采用super加上点和成员变量或方法的形式。,构造方法,例3-3:源程序名为Inheritance.java,是构造方法的例子。,/*定义一个父类superclassname*/class superclassname int x;superclassname()/父类无参数构造方法 x=3;System.out.println(在父类中x=+x);void d
13、osomething()/父类中成员方法 System.out.println(在父类中dosomething();,/*定义一个子类subclass,从superclassname继承而来*/class subclass extends superclassname int x;subclass()super();/调用父类无参数构造方法 x=5;System.out.println(在子类中x=+x);void dosomething()/子类中成员方法 super.dosomething();/调用父类中成员方法 dosomething()System.out.println(在子类中d
14、osomething();System.out.println(super.x=+super.x+sub.x=+this.x);/*利用super引用父类对象,利用this引用当前对象*/,/*定义主程序类inheritance*/class Inheritance public static void main(String args)subclass subc=new subclass();/调用子类构造方法创建一个对象subc subc.dosomething();/调用子类的成员方法 dosomething(),运行结果:,3.3对象,对象的定义=new(参数1,参数2,);或者:;=
15、new(参数1,参数2,);创建对象实际执行了三个操作:说明对象、实例化对象和初始化对象。说明对象:就是给对象命名,也称定义一个实例变量。一般形式为:;实例化对象:给对象分配存储空间,用来保存对象的数据和代码。new运算符用来实现对象的实例化。=new(参数1,参数2,);,对象的使用,初始化对象通过调用该对象所在类的构造方法来实现的。引用对象的方法一般形式:(,);例3-4:程序TwoArea.java,是引用对象的例子。,执行结果:,/*定义一个类Point*/class Point public int x;/定义成员变量 public int y;/定义成员变量 public Poin
16、t()/Point构造方法,不带参数 this.x=0;/引用当前x this.y=0;/引用当前y public Point(int x,int y)/Point构造方法,带两个参数 this.x=x;/引用当前x this.y=y;/引用当前y,/*定义一个类Graph*/class Graph public int width=0;/定义成员变量 public int height=0;/定义成员变量 public Point origin;/定义成员变量 public Graph()/Graph构造方法1,不带参数 origin=new Point(0,0);public Graph(
17、Point p)/Graph构造方法2,带一个参数 origin=p;public Graph(Point p,int w,int h)/Graph构造方法3,带三个参数,origin=p;width=w;height=h;,public void move1(int x,int y)/成员方法move1 origin.x=x;origin.y=y;public void move2(int a,int b)/成员方法move2 origin.x+=a;origin.y+=b;public int area()/成员方法area return width*height;,public clas
18、s TwoArea/*定义主程序类*/public static void main(String args)int x=3,y=4;int w=4,h=5;Point p1=new Point(x,y);/将原点p1定在(3,4)坐标点 Point p2=new Point(6,8);/将原点p2定在(6,8)坐标点 Graph r1=new Graph(p1,w,h);Graph r2=new Graph(p2,8,10);r1.move1(4,6);/把矩形r1的原点移到(4,6)r2.move2(-2,4);/把矩形r2的原点x坐标减2,y坐标加4 System.out.println
19、(两个矩形面积差=+(r2.area()-r1.area();/*调用成员方法计算矩形r2与r1面积差*/System.out.print(r1的原点为(+r1.origin.x+,);System.out.println(r1.origin.y+);System.out.print(r2的原点为(+r2.origin.x+,);System.out.println(r2.origin.y+);,3.4继承与多态,继承性子类可以沿用父类的某些特征。子类也可以具有自己独立的属性和操作。继承分单继承和多继承。,什么是继承,在日常生活中,经常遇到如下问题。有一辆自行车,自行车有颜色和型号大小之分,而
20、公路赛车也有颜色和型号大小之分,公路赛车多了一项速度的优势。自行车有的东西公路赛车全都有,而公路赛车有的东西自行车不一定有,它们相同地方有很多。在Java中,对于这种情况下就采用继承来完成这个功能。,/这是一个类,表述的是一个自行车 public class bike public String color;/自行车的颜色 public int size;/自行车的大小,即型号/这是一个类,表述的是一个公路赛类pubic class racing_cycle public String color;/自行车的颜色public int size;/自行车的大小,即型号public String
21、speed;/公路赛车的速度,/这是一个类,表述的是一个自行车public class bike public String color;/自行车的颜色 public int size;/自行车的大小,即型号/这是一个类,表述的是一个公路赛车,它继承于自行车pubic class racing_cycle extends bike public String speed;/公路赛车的速度,在Java中,被继承的类叫超类(superclass),继承超类的类叫子类(subclass)。因此,子类是超类的一个功能上的扩展,它继承了超类定义的所有属性和方法,并且添加了特有功能方法。Java是单继承的
22、,子类可以有很多,父类只能有一个。上面的例子,如果加一个Friend类,Son只能继承自Father,要么继承Friend,不能同时继承Father和Friend。Java的继承是多层继承的,是一个类可以有很多子类,而子类下面又可以有很多子类。父类没有定义一个无参的构造器,那么编译器就默认生成一个无参的构造器,也可以在子类构造器里显示使用super方法调用父类构造器,super方法里写几个参数就可以表示调用的是父类的哪一个构造器。,当父类中没有构造方法或只有不带参数的构造方法时,系统会在子类构造器自动加上super语句,可以不显式地添加对父类构造器方法的调用,但如果父类中有带参数的构造器方法,
23、那么,必须显式在构造器中使用super调用父类的带参数的构造器方法,否则编译出错。,继承性,继承的目的:实现代码重用。子类不能继承父类中访问权限为private的成员变量和方法。子类可以继承父类方法和成员变量,但它不能继承构造方法。创建子类格式:,Public class SubClass extends SuperClass,访问权限 class 类名 extends 父类,例3-5:源程序名Car Demo.java,是类的继承。,class Car int car_number;void set_number(int car_num)car_number=car_num;void sho
24、w_number()System.out.println(My car No.is:+car_number);,继承性,class Bus extends Car int capacity;void set_capacity(int bus_car_capacity)capacity=bus_car_capacity;void show_capacity()System.out.println(My capacity is:+capacity);,class CarDemo public static void main(String args)Bus DemoBus=new Bus();De
25、moBus.set_number(6868);DemoBus.show_number();DemoBus.set_capacity(30);DemoBus.show_capacity();,运行结果:,继承性,项目任务:,多态性,多态性体现在两个方面:由方法重载实现的静态多态性(编译时多态)和方法重写实现的动态多态性(运行时多态)。方法重写:指方法的含义被重写后替代。子类通过隐藏父类的成员变量和重写父类的方法,可以把父类的状态和行为改变为自身的状态和行为。子类中重写的方法和父类中被重写的方法要具有相同的名字,相同的参数表和相同的返回类型,只是函数体不同。方法重写时应遵循的原则:改写后的方法不能
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象编程 面向 对象 编程 PPT 课件
链接地址:https://www.31ppt.com/p-5619414.html