《Java语言学习教程.pptx》由会员分享,可在线阅读,更多相关《Java语言学习教程.pptx(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章第四章 类与对象类与对象第1页/共26页面向对象的概念面向对象的概念n面向过程面向过程 在一个结构体中定义窗口的大小,位置,颜色,背景等属性,对窗口在一个结构体中定义窗口的大小,位置,颜色,背景等属性,对窗口进行操作的函数与窗口本身的定义没有任何关系,如进行操作的函数与窗口本身的定义没有任何关系,如HideWindow,MoveWindow,MinimizeWindow,这些函数都需要接受一个代表要这些函数都需要接受一个代表要被操作的窗口参数被操作的窗口参数。n面向对象面向对象 定义窗口时,除了要指定在面向过程中规定的那些属性,如大小,位定义窗口时,除了要指定在面向过程中规定的那些属性,
2、如大小,位置,颜色,背景等外,还要指定该窗口可能具有的动作置,颜色,背景等外,还要指定该窗口可能具有的动作,如隐藏,移,如隐藏,移动,最小化等。这些函数被调用时,都是以某个窗口要隐藏,某个窗动,最小化等。这些函数被调用时,都是以某个窗口要隐藏,某个窗口要移动的语法格式来使用的口要移动的语法格式来使用的,这是一种主语与谓语的关系。,这是一种主语与谓语的关系。n面向对象的三大特征面向对象的三大特征封装封装 (Encapsulation)继承继承 (Inheritance)多态多态 (Polymorphism)第2页/共26页类与对象类与对象n类是对某一类事物的描述,是抽象的、概念上的定类是对某一类
3、事物的描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体,因而义;对象是实际存在的该类事物的每个个体,因而也称实例也称实例(instance)。n如果如果类是汽车的设计图纸类是汽车的设计图纸,那么将,那么将对象比作一辆辆对象比作一辆辆的汽车的汽车。所以面向对象程序设计的重点是类的设。所以面向对象程序设计的重点是类的设计,而不是对象的设计。计,而不是对象的设计。第3页/共26页Java类的声明类的声明n类声明语法:类声明语法:类修饰符类修饰符 class 类名类名 extends 父类名父类名 implements 接口名接口名 成员变量定义成员变量定义;成员方法定义成员方法定义;
4、实例:书实例:书P66第4页/共26页类与对象类与对象class Personint age;void shout()System.out.println(“oh,my god!I am“+age);nage是类的属性是类的属性,也叫类成员变量,也叫类成员变量。nshout是方法也叫类的成员函数。是方法也叫类的成员函数。nshout方法可以直接访问同一个类中的方法可以直接访问同一个类中的age变量变量,如果一个,如果一个方法中有与成员变量同名的局部变量,该方法中对这个变方法中有与成员变量同名的局部变量,该方法中对这个变量名的访问是局部变量,而不再是成员变量。量名的访问是局部变量,而不再是成员变
5、量。第5页/共26页对象的创建对象的创建Person p1=new Person();执行完后的内存状态执行完后的内存状态当一个对象被创建时,会对其中各种类型的成员变量当一个对象被创建时,会对其中各种类型的成员变量自动进行初自动进行初始化赋值始化赋值。除了基本数据类型之外的变量类型都是引用类型。除了基本数据类型之外的变量类型都是引用类型。第6页/共26页对象的使用对象的使用创建新的对象之后创建新的对象之后,我们就可以使用我们就可以使用“对象名对象名.对象成员对象成员”的的格式,来访问对象的成员(包括属性和方法)格式,来访问对象的成员(包括属性和方法)class TestPersonpublic
6、 static void main(String args)Person p1=new Person();Person p2=new Person();p1.age=30;p1.shout();p2.shout();第7页/共26页对象的生命周期对象的生命周期第8页/共26页对象的比较对象的比较n“=”运算符与运算符与equals()方法的区别方法的区别 “=”运算符用于运算符用于比较两个变量的值比较两个变量的值是否相等是否相等 equals()方法方法比较两个对象中的内容比较两个对象中的内容是否一致是否一致class test public static void main(String a
7、rg)String str1=new String(“abc”);String str2=new String(“abc”);String str3=str1;if(str1=str2)System.out.println(“true”);else System.out.println(“false”);False,因为两个对象的因为两个对象的首地址不一样,首地址不一样,str1是第是第一个对象首地址,一个对象首地址,str2是是第二个对象的首地址。第二个对象的首地址。str1.equals(str2)?第9页/共26页类的封装性类的封装性n如果外面的程序可以随意修改一个类的成员变量,会造成如
8、果外面的程序可以随意修改一个类的成员变量,会造成不可预料的程序错误,就象一个人的身高,不能被外部随不可预料的程序错误,就象一个人的身高,不能被外部随意修改,只能意修改,只能通过各种摄取营养的方法去修改通过各种摄取营养的方法去修改这个属性。这个属性。n在定义一个类的成员在定义一个类的成员(包括变量和方法包括变量和方法)时,使用时,使用private关关键字键字说明这个成员的访问权限,这个成员成了说明这个成员的访问权限,这个成员成了类的私有成类的私有成员员,只能,只能被这个类的其他成员方法调用被这个类的其他成员方法调用,而不能被其他的,而不能被其他的类中的方法所调用。类中的方法所调用。对一个变量的
9、操作,一般都有对一个变量的操作,一般都有读取和赋值读取和赋值操作,我们分别操作,我们分别定义两个方法来实现这两种操作,一个是定义两个方法来实现这两种操作,一个是getXxx()(Xxx表示要访问的成员变量的名字),用来读取这个成员变量表示要访问的成员变量的名字),用来读取这个成员变量操作,另外一个是操作,另外一个是setXxx()用来对这个成员变量赋值。用来对这个成员变量赋值。第10页/共26页类的封装性类的封装性n一个类通常就是一个小的模块,我们应该让模块仅一个类通常就是一个小的模块,我们应该让模块仅仅公开必须要让外界知道的内容,而隐藏其它一切仅公开必须要让外界知道的内容,而隐藏其它一切内容
10、。内容。n我们在进行程序的详细设计时,应尽量避免一个模我们在进行程序的详细设计时,应尽量避免一个模块直接修改或操作另一个模块的数据,模块设计追块直接修改或操作另一个模块的数据,模块设计追求求强内聚强内聚(许多功能尽量在类的内部独立完成,不(许多功能尽量在类的内部独立完成,不让外面干预),让外面干预),弱耦合弱耦合(提供给外部尽量少的方法(提供给外部尽量少的方法调用)。调用)。n优点:优点:隐藏类的实现细节隐藏类的实现细节;让使用者只能;让使用者只能通过事先定制好的通过事先定制好的方法来访问数据方法来访问数据,可以方便地加入控制逻辑,限制对,可以方便地加入控制逻辑,限制对属性的不合理操作;属性的
11、不合理操作;便于修改,增强代码的可维护性便于修改,增强代码的可维护性实例:书实例:书P73第11页/共26页Java的构造函数的构造函数n构造方法的特征构造方法的特征它具有它具有与类相同的名称与类相同的名称;它它不含返回值不含返回值,它,它不能不能在方法中在方法中用用return语句返回一个值语句返回一个值n构造方法的作用:构造方法的作用:当一个类的实例对象刚产生时,这个类当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,我们可以在这个方法中加入的构造方法就会被自动调用,我们可以在这个方法中加入要完成初始化工作的代码。使用要完成初始化工作的代码。使用new来创建类的新实例时,来创建类
12、的新实例时,Java完成三项工作(书完成三项工作(书P74)。)。n在在java每个类里都至少有一个构造方法每个类里都至少有一个构造方法,如果程序员没有,如果程序员没有在一个类里定义构造方法,系统会自动为这个类产生一个在一个类里定义构造方法,系统会自动为这个类产生一个默认的构造方法,该方法什么也不做。一旦编程者为该类默认的构造方法,该方法什么也不做。一旦编程者为该类定义了构造方法,系统就不再提供默认的构造方法了。定义了构造方法,系统就不再提供默认的构造方法了。第12页/共26页构造函数重载构造函数重载n和一般的方法重载一样,重载的构造函数具有和一般的方法重载一样,重载的构造函数具有不同不同个数
13、或不同类型的参数个数或不同类型的参数,编译器就可以根据这一点,编译器就可以根据这一点判断出用判断出用new 关键字产生对象时,该调用哪个构造关键字产生对象时,该调用哪个构造方法了。方法了。n产生对象的格式:产生对象的格式:类名类名 对象名对象名new 类名类名(参数列表参数列表);n重载构造方法可以完成不同初始化的操作重载构造方法可以完成不同初始化的操作。n实例:矩形类的构造函数重载实例:矩形类的构造函数重载(实例:书实例:书p75)。第13页/共26页类的继承类的继承n通过继承可以通过继承可以简化类的定义简化类的定义。nJava只只支持单继承支持单继承,不允许多重继承,不允许多重继承(不能同
14、时继承多个类不能同时继承多个类)。n可以有可以有多层继承多层继承,即一个类可以继承某一个类的子类,如类,即一个类可以继承某一个类的子类,如类B继承了类继承了类A,类类C又可以继承类又可以继承类B,那么类那么类C也间接继承了类也间接继承了类A。n子类继承父类所有的成员变量和成员方法,但子类继承父类所有的成员变量和成员方法,但不继承父类的构不继承父类的构造方法造方法。在子类的构造方法中可。在子类的构造方法中可使用语句使用语句super(参数列表参数列表)调调用父类的构造方法用父类的构造方法。n如果子类的如果子类的构造方法中没有显式地调用父类构造方法构造方法中没有显式地调用父类构造方法,也没有,也没
15、有使用使用this关键字调用重载的其它构造方法,则在产生子类实例关键字调用重载的其它构造方法,则在产生子类实例对象时,对象时,系统默认调用父类无参数的构造方法系统默认调用父类无参数的构造方法。第14页/共26页类的继承类的继承class Personpublic String name;public int age;public void getInfo()System.out.println(name=+name+,age=+age);class Student extends Personpublic String school;public void study()class TestS
16、tudentpublic static void main(String arg)Student st=new Student();=zhangsan;=20;();第15页/共26页类的继承类的继承class Person /增加一个构造函数增加一个构造函数public Person(String name,int age)this.name=name;this.age=age;class Student extends Person .class TestStudentpublic static void main(String arg)Student st=new Student();=
17、zhangsan;=20;();编译出错:编译出错:子类出现问题,找不子类出现问题,找不到父类构造函数到父类构造函数PersonPerson()()。系统中默认的系统中默认的StudentStudent()()构造函数将先调用构造函数将先调用父类不带参数构造函父类不带参数构造函数。此时父类有了新数。此时父类有了新构造函数,则构造函数,则PersonPerson()()找不到了,出错。找不到了,出错。第16页/共26页类的继承类的继承class Person /增加一个构造函数增加一个构造函数public Person(String name,int age)this.name=name;thi
18、s.age=age;class Student extends Person .class TestStudentpublic static void main(String arg)Student st=new Student();=zhangsan;=20;();public Student()super(Zhangsan,15);防止编译出错的防止编译出错的两种方法:两种方法:1 1、在父类中增加、在父类中增加无参数构造函数;无参数构造函数;2 2、在子类增加构、在子类增加构造函数,用造函数,用supersuper调用父类的构造调用父类的构造方法。方法。public Person()第1
19、7页/共26页覆盖父类的方法覆盖父类的方法n覆盖方法必须和被覆盖方法覆盖方法必须和被覆盖方法具有相同的方法名称、具有相同的方法名称、参数列表和返回值类型参数列表和返回值类型。实例实例p76n如果在子类中想调用父类中的那个被覆盖的方法,如果在子类中想调用父类中的那个被覆盖的方法,我们可以用我们可以用super.方法方法的格式的格式。n覆盖方法时,覆盖方法时,不能使用不能使用比父类中被覆盖的方法比父类中被覆盖的方法更严更严格的访问权限格的访问权限。第18页/共26页类的多态性类的多态性n多态,即多态,即一个名字可具有多种语义一个名字可具有多种语义。在面向对象的。在面向对象的语言中,多态引用表示可以
20、引用多个类的实例。语言中,多态引用表示可以引用多个类的实例。n应用程序不必为每一个派生类(子类)编写调用函应用程序不必为每一个派生类(子类)编写调用函数,数,只需要对抽象基类进行处理只需要对抽象基类进行处理即可。这一招叫即可。这一招叫“以不变应万变以不变应万变”,可以大大提高程序的可复用性。,可以大大提高程序的可复用性。n派生类的功能可以派生类的功能可以被基类的引用变量引用被基类的引用变量引用,这叫,这叫向向后兼容后兼容,可以提高程序的可扩充性和可维护性。,可以提高程序的可扩充性和可维护性。第19页/共26页类的多态性类的多态性n多态,即多态,即一个名字可具有多种语义一个名字可具有多种语义。在
21、面向对象的。在面向对象的语言中,多态引用表示可以引用多个类的实例。语言中,多态引用表示可以引用多个类的实例。n应用程序不必为每一个派生类(子类)编写调用函应用程序不必为每一个派生类(子类)编写调用函数,数,只需要对抽象基类进行处理只需要对抽象基类进行处理即可。这一招叫即可。这一招叫“以不变应万变以不变应万变”,可以大大提高程序的可复用性。,可以大大提高程序的可复用性。n派生类的功能可以派生类的功能可以被基类的引用变量引用被基类的引用变量引用,这叫,这叫向向后兼容后兼容,可以提高程序的可扩充性和可维护性。,可以提高程序的可扩充性和可维护性。第20页/共26页类的多态性类的多态性class Pol
22、ygonpublic Polygon()public void draw()System.out.println(Polygon);class Rectangle extends Polygonpublic Rectangle()public void draw()System.out.println(Rectangle);public class Graphicspublic static void main(String args)Polygon poly=new Polygon();Rectangle rect=new Rectangle();poly.draw();poly=rect;
23、poly.draw();输出:输出:PolygonRectangle问与答:书问与答:书 P79第21页/共26页一个类实例编程一个类实例编程编写一个线段类编写一个线段类 MyLine,要求如下要求如下:n主要属性有主要属性有:pnt1,pnt2 端点,类型为端点,类型为Point ()()n编写构造方法,如编写构造方法,如(int x1,int y1,int x2,int y2)或或(Point p1,Point p2)n编写成员方法。如:编写成员方法。如:检查线段是否位于第一象限检查线段是否位于第一象限check求线段的长度求线段的长度 length()求该线段中点的求该线段中点的x坐标坐
24、标其他方法。其他方法。n编写测试程序编写测试程序第22页/共26页Graphics类与图形绘制类与图形绘制 方法,将返回方法,将返回GraphicsGraphics类对象。类对象。Graphics.drawLine(int x1,int y1,int x2,int y2)Graphics.drawLine(int x1,int y1,int x2,int y2)方法。方法。Graphics.drawString(String str,int x,int y)Graphics.drawString(String str,int x,int y)方法。方法。注意:注意:drawStringdraw
25、String方法的坐标参数中方法的坐标参数中(x,y)x,y)为为文本的左下角文本的左下角。编程实例:编程实例:在编写的在编写的MyLineMyLine类基础上,为类基础上,为MyLineMyLine添加一个添加一个DrawMe(Graphics g)DrawMe(Graphics g)方法,编写方法,编写AppletApplet上绘制一组线段(线段上绘制一组线段(线段不少于不少于5 5条)的程序。条)的程序。第23页/共26页Graphics类与图形绘制类与图形绘制 MyLineMyLine类中添加类中添加DrawMe()DrawMe()方法。方法。public void public vo
26、id DrawMe(Graphics g)DrawMe(Graphics g)g.drawLine(pnt1.x,pnt1.y,pnt2.x,pnt2.y);g.drawLine(pnt1.x,pnt1.y,pnt2.x,pnt2.y);编写一个编写一个AppletApplet的继承类。的继承类。import java.applet.Applet;import java.applet.Applet;import;import;public public classclass appletMylineappletMyline extendsextends AppletApplet public
27、void public void paint(Graphics g)paint(Graphics g)myline mline1=new myline(10,10,30,30);myline mline1=new myline(10,10,30,30);mline1.mline1.DrawMe(g)DrawMe(g);编写编写*.*.htmlhtml文件调用该文件调用该AppletApplet类。类。第24页/共26页本章总结本章总结 理解理解面向对象面向对象的概念。类的定义,对象的定义。面向对象的的概念。类的定义,对象的定义。面向对象的三大特征三大特征,掌握类的,掌握类的封装封装、类的、类的继承继承、类的、类的多态性多态性的具体含义。的具体含义。类的声明与对象的创建。在对象的比较中,类的声明与对象的创建。在对象的比较中,“=”运算符与运算符与equals()方法的方法的区别区别。什么叫做什么叫做构造函数重载构造函数重载?在类的?在类的继承中继承中子类的构造函数与父子类的构造函数与父类类构造函数的关系构造函数的关系?第25页/共26页感谢您的观看!第26页/共26页
限制150内