《java类与对象》PPT课件.ppt

上传人:牧羊曲112 文档编号:2052659 上传时间:2023-01-04 格式:PPT 页数:78 大小:1.73MB
返回 下载 相关 举报
《java类与对象》PPT课件.ppt_第1页
第1页 / 共78页
《java类与对象》PPT课件.ppt_第2页
第2页 / 共78页
《java类与对象》PPT课件.ppt_第3页
第3页 / 共78页
《java类与对象》PPT课件.ppt_第4页
第4页 / 共78页
《java类与对象》PPT课件.ppt_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《《java类与对象》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《java类与对象》PPT课件.ppt(78页珍藏版)》请在三一办公上搜索。

1、第三章,类与对象,2,目标,面向对象技术基础类的概念、定义与使用对象的生成、使用static关键字this关键字final关键字Java类中的限定词包和import语句,3,面向对象编程,4,相关概念,5,对象,对象是客观存在的具体实体,具有明确定义的状态和行为。,6,对象的示例,收银员对象,顾客对象,顾客姓名:朱丽叶年龄:28体重:52千克操作:购买商品,状态,姓名:布兰尼职衔:收银员年龄:35体重:60千克操作:收款打印帐单,行为,7,类,类是用于组合各个对象所共有操作和属性的一种机制,形状类,动物类,汽车类,类的示例,“类是具有相同属性和行为的一组对象的集合”,8,类和对象的示例,收银员

2、,系统管理员,仓库管理员,促销员,采购经理,9,属性,事物的特性,在类中表示为变量每个对象的每个属性都拥有其特有的值属性名称由类的所有实例共享,住址,姓名,属性,年龄,“在类中表示对象或实体拥有的特性时称为属性”,10,方法,“对象执行的操作称为方法。”,11,方法的示例,缝衣服的步骤,量尺寸,得到工具,缝衣服,方法,缝制衣服,裁缝,12,类和对象的区别,类是概念模型,定义对象的所 有特性和所需 的操作,对象是真实的模型,类定义实体,对象是实际的实体,13,面向对象的基本特征,14,封装性,信息隐藏,隐藏对象的实现细节,不让用户看到将东西包装在一起,然后以新的完整形式呈现出来例如,两种或多种化

3、学药品组成一个胶囊将方法和属性一起包装到一个单元中,单元以类的形式实现,“隐藏属性、方法或实现细节的过程称为封装。”,15,封装的示例 3-1,接口,采购经理,罗杰斯先生,法拉力公司,.,迪斯尼汽车公司,.,市场经理,雪莉女士,要求,16,封装的示例 3-2,有选择地提供数据,法拉力公司,迪斯尼汽车公司,17,封装的示例 3-3,实体法拉力公司,实体迪斯尼汽车公司,Auti Ltd,.,Buto Ltd,.,18,继承性,父 类,子类,19,多态性,父类,子类-绘制和移动三角形,子类-绘制和移动矩形,子类-绘制和移动五边形,子类,20,面向对象的Java实现,21,在 Java 中实现类,语法

4、class 其中,class 是创建类所使用的关键字,是类的名称,包含属性和方法的声明。,22,在 Java 中实现类,类的命名规则:要符合标识符规则;不能为 Java 中的关键字类名最好容易识别,多为英文单词组成,class Book String bookName;String authorName;int nopages;boolean available;void isAvailable()if(available=true)System.out.println(有这本书);,23,成员变量和局部变量,类体中的变量分为两部分。变量定义部分所定义的变量称为类的成员变量,在方法体中定义的变

5、量和方法的参数被称为局部变量。成员变量和局部变量的共同之处成员变量和局部变量的类型都可以是Java中的任何一种数据类型,包括基本类型:整型、浮点型、字符型;引用类型:数组类型、对象。成员变量和局部变量的名字都必须符合标识符规定,名字如果使用拉丁字母,首写字母小写;如果多个单词组成,从第2个单词开始的其他单词的首写字母使用大写。成员变量和局部变量的区别:成员变量在整个类内都有效,局部变量只在定义它的方法内有效。,24,成员变量和局部变量,public class Benson int x=100,y;void f()int x=10;y=x;/注意这里y得到的值为10,而不是100.,注:如果局

6、部变量的名字与成员变量的名字相同,则成员变量被隐藏,也就是说,这个成员变量在这个方法内暂时失效。,25,成员变量和局部变量,public class Employee int sideA,sideB,sideC;void setSide(int sideA,int sideB,int sideC)this.sideA=sideA;this.sideB=sideB;this.sideC=sideC;,注:如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,这时如果想在该方法内使用成员变量,必须使用关键字this。,26,类中的方法,方法的名称,参数列表,方法的主体,方法返回的对象类型或原始

7、类型,27,类中的方法,语法(,)其中,是方法返回值的数据类型 是用户自定义的方法名称方法的参数列表是一组变量声明。是方法的主体,28,类中的方法,不能为 Java 中的关键字,不能包含空格或点号“.”,可以下划线“_”、字母或“$”符号开头,方法的命名规则:,29,类中的方法,class Book String bookName;String authorName;int nopages;boolean available;void isAvailable()if(available=true)System.out.println(有这本书);.,30,创建对象,定义类的最终目的是要使用这些

8、类,创建并操纵某类的对象是使用该类的最主要手段。创建对象的一般格式为:类名 对象名=new 类名(参数);其中包含声明、实例化和初始化3个步骤,声明:类名 对象名 声明并不为对象分配内存空间,而只是分配一个引用空间;对象的引用类似于指针,是32位的地址空间,它的值指向一个中间的数据结构,它存储有关数据类型的信息以及当前对象所在的堆的地址,而对于对象所在的实际的内存地址是不可操作的,这就保证了安全性。,实例化 运算符new为对象分配内存空间,它调用对象的构造方法,返回引用。一个类的不同对象分别占据不同的内存空间。,生成 执行构造方法,进行初始化;根据参数不同调用相应的构造方法。,31,创建对象,

9、class Student float height,weight;String head,ear,hand,foot,mouth;void speak(String s)System.out.println(s);class A public static void main(String args)Student ZhangSan;/声明对象/为对象分配内存,使用new 运算符和默认的构造方法ZhangSan=new Student();,32,对象的使用,对象不仅可以改变自己变量的状态,而且还拥有使用创建它的那个类中的方法的能力,对象通过使用这些方法可以产生一定的行为。通过圆点符号“.”

10、可以实现对变量的访问和方法的调用。变量和方法可以通过设定访问权限来限制其它对象对它的访问。,33,class Book String bookName;String authorName;int nopages;boolean available;Book(String bName,String aName,int Page,boolean a)bookName=bName;authorName=aName;nopages=Page;available=a;void isAvailable()if(available=true)System.out.println(有这本书);public c

11、lass BookTest public static void main(String args)Book objBook=new Book(a,b,3,true);objBook.isAvailable();System.out.println(objBook.bookName);,34,class Book String bookName;String authorName;int nopages;boolean available;void isAvailable()if(available=true)System.out.println(有这本书);public class Book

12、Test public static void main(String args)Book objBook=new Book();objBook.bookName=a;.objBook.isAvailable();System.out.println(objBook.bookName);,35,练习,创建一个Date类,具有三个整型成员变量year,month,day,具有三个成员方法setDate,isLeapYear,print,其中setDate用来给成员变量赋值,isLeapYear用来判断当前年份是否为闰年,print用来输出当前日期值。在主函数中创建Date类的对象,并调用三个成员

13、函数实现赋日期值,输出日期值,并判断当前年份是否为闰年。,36,构造方法,每当创建给定类的实例时就调用的方法与类同名,但没有返回类型Java 为对象分配内存,初始化实例变量时调用构造方法两种构造方法参数化构造方法隐式构造方法,37,隐式构造方法的示例,class Sdate int month=11;int day=27;int year=1969;public static void main(String args)Sdate S1;S1=new Sdate();,38,参数化构造方法的示例,class Sdate int month;int day;int year;Sdate(int

14、m,int d,int y)month=m;day=d;year=y;System.out.println(“日期是+m+/+d+/+y+.);public static void main(String args)Sdate S1,S2;S1=new Sdate(11,27,1969);S2=new Sdate(3,3,1973);,日期是 11/27/1969.日期是 3/3/1973.,39,参数化构造方法的示例,class Sdate int month;int day;int year;Sdate(int m,int d,int y)month=m;day=d;year=y;Syst

15、em.out.println(“日期是+m+/+d+/+y+.);public static void main(String args)Sdate S1,S2;S1=new Sdate();S2=new Sdate(3,3,1973);,The constructor Sdate()is undefined,40,参数传值,当方法被调用时,如果方法有参数,参数必须要实例化,即参数变量必须有具体的值。public class Date/类声明 int year,month,day;/成员变量,表示年、月、日 void setDate(int y,int m,int d)/成员方法,设置日期值/

16、无返回值,有3个参数 year=y;month=m;day=d;public static void main(String args)Date1 aday=new Date1();/创建对象 aday.setDate(2006,1,28);/调用类方法,41,1基本数据类型参数的传值,基本数据类型的参数,向该参数传递的值的级别不可以高于该参数的级别,比如,不可以向int类型参数传递一个float值,但可以向double类型参数传递一个float值。这种数据传递方式被称为是值传递,方法接收参数的值,但不能改变这些参数的值。,42,2引用类型参数的传值,引用传值方式:Java的引用类型数据包括对

17、象、数组和接口,当方法中参数是引用类型时,引用数据类型传递给方法的是数据在内存中的地址,方法中对参数变量的操作可以改变原变量的值。,43,class People String face;void setFace(String s)face=s;class C void f(int x,double y,People p)x=x+1;y=y+1;p.setFace(笑脸);System.out.println(参数x和y的值分别是:+x+,+y);System.out.println(参数对象p的face是:+p.face);public class Ep3_8 public static v

18、oid main(String args)int m=100;double n=100.88;People zhang=new People();zhang.setFace(很严肃的样子);C a=new C();a.f(m,n,zhang);System.out.println(main方法中m和n的值仍然分别是:+m+,+n);System.out.println(main方法中对象zhang的face是:+zhang.face);,zhang.face=很严肃的样子;,改变形参值 导致实参值的改变,zhang.face=“笑脸;,参数x和y的值分别是:101,101.88参数对象p的fa

19、ce是:笑脸main方法中m和n的值仍然分别是:100,100.88main方法中对象zhang的face是:笑脸,44,方法重载,方法重载,类中有多个具有相同名称的方法,或者是参数的个数不同,或者是参数类型不同,注意:方法返回值的类型不能用来区分重载的方法。不能通过两个方法的返回值的类型来区分它们。这是因为当你调用一个方法时,返回值的类型是不显示的。,45,class MethodOverloading void receive(int i)System.out.println(Receive one int data);System.out.println(i=+i);void recei

20、ve(int x,int y)System.out.println(Receive two int datas);System.out.println(x=+x+y=+y);public class MethodOverloadingTest public static void main(String args)MethodOverloading mo=new MethodOverloading();mo.receive(1);mo.receive(2,3);,46,构造方法的重载,class Sdate int month;int day;int year;Sdate(int m,int

21、d,int y)month=m;day=d;year=y;System.out.println(“日期是+m+/+d+/+y+.);Sdate()Sdate(int m,int y)month=m;year=y;public static void main(String args)Sdate S1,S2;S1=new Sdate();S2=new Sdate(3,3,1973);,47,static 修饰符,成员变量可以分为实例变量和类变量。同样,类中的方法也可分为实例方法和类方法。用static关键字修饰的变量是类变量,也称静态变量,同样的,用static关键字修饰的方法是类方法,也称静态

22、方法目的:使该变量或方法独立于类的实例,使用类去访问,而不用类实例,48,static 修饰符,注意:如果在声明时不用static关键字修饰,则默认声明为实例变量和实例方法。每个对象的实例变量都分配内存,通过该对象来访问这些实例变量,不同的实例变量是不同的。类变量仅在生成第一个对象时分配内存,所有实例对象共享同一个类变量,每个实例对象对类变量的改变都会影响到其它的实例对象。类变量可通过类名直接访问,无需先生成一个实例对象,也可以通过实例对象访问类变量。,49,class Laderfloat upperBase,high;static float lowerBottom;Lader(float

23、 x,float y,float h)upperBase=x;lowerBottom=y;high=h;float getLowerBottom()return lowerBottom;void modifyLowerBottom(float b)lowerBottom=b;public class Ep3_9 public static void main(String args)Lader laderOne=new Lader(3.0f,10.0f,20),laderTwo=new Lader(2.0f,3.0f,10);Lader.lowerBottom=200;/通过类名操作类变量 S

24、ystem.out.println(laderOne的下底:+laderOne.getLowerBottom();System.out.println(laderTwo的下底:+laderTwo.getLowerBottom();laderTwo.lowerBottom=60;/laderTwo.modifyLowerBottom(60);/通过对象操作类变量 System.out.println(laderOne的下底:+laderOne.getLowerBottom();System.out.println(laderTwo的下底:+laderTwo.getLowerBottom();,l

25、aderOne的下底:200.0laderTwo的下底:200.0laderOne的下底:60.0laderTwo的下底:60.0,50,static 修饰符,注意:实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,实例方法由实例对象调用。但类方法不能访问实例变量,只能访问类变量。类方法可以由类名直接调用,也可由实例对象进行调用。,51,class Member static int classVar;int instanceVar;static void setClassVar(int i)classVar=i;/instanceVar=i;/类方法不能访问实例变量stati

26、c int getClassVar()return classVar;void setInstanceVar(int i)classVar=i;/实例方法不但可以访问类变量,也可以实例变量instanceVar=i;int getInstanceVar()return instanceVar;public class MemberTest public static void main(String args)Member m1=new Member();Member m2=new Member();m1.setClassVar(1);m2.setClassVar(2);System.out.

27、println(m1.classVar=+m1.getClassVar()+m2.ClassVar=+m2.getClassVar();m1.setInstanceVar(11);m2.setInstanceVar(22);System.out.println(m1.InstanceVar=+m1.getInstanceVar()+m2.InstanceVar=+m2.getInstanceVar();,m1.classVar=2m2.ClassVar=2m1.InstanceVar=11 m2.InstanceVar=22,52,this 关键字,this是Java的一个关键字,表示某个对象

28、。this可以出现在实例方法和构造方法中,但不可以出现在类方法中。this关键字出现在类的构造方法中时,代表使用该构造方法所创建的对象。实例方法必须通过对象来调用,当this关键字出现在类的实例方法中时,代表正在调用该方法的当前对象。成员函数中定义了和成员变量中相同的变量时,引用成员变量要用this.构造函数中调用同一个类的其他构造函数时用this。,53,【例】编写两个重载构造函数的类,在第二个构造函数中使用this调用第一个构造函数。,public class ThisConstructorCall public ThisConstructorCall(String s)System.ou

29、t.println(s=+s);public ThisConstructorCall(int i)this(i=+i);public static void main(String args)ThisConstructorCall t=new ThisConstructorCall(String call);ThisConstructorCall ct=new ThisConstructorCall(47);,s=String calls=i=47,54,this 关键字的示例,class Pixel int x;int y;void init(int x,int y)this.x=x;thi

30、s.y=y;public static void main(String args)Pixel p=new Pixel();p.init(4,3);,55,final 关键字,final 关键字可以修饰类、类的成员变量和成员方法。用final修饰成员变量,说明该成员变量是最终变量,即为常量。程序中的其他部分可以访问,但不能够修改。用final修饰成员方法,则该方法不能再被子类所重写,即该方法为最终方法。,56,1final 修饰成员变量,final修饰变量,则成为常量,例如 final type variableName;修饰成员变量时,定义时同时给出初始值,而修饰局部变量时不做要求。,57,

31、2final 修饰成员方法,final修饰方法,则该方法不能被子类重写。final returnType methodName(paramList),58,3final 类,final修饰类,则类不能被继承。如果一个类被final关键字修饰,说明这个类不能再被其他类所继承,该类被称为最终类。final class finalClassName 在默认情况下,所有的成员变量或成员方法都可以被隐藏或重写,如果父类的成员不希望被子类的成员所隐藏或重写则将其声明为final。,59,class ep3_12_a static final double pi=3.1415926;/声明静态常量 publ

32、ic final void f()/声明最终方法System.out.println(pi=+pi);class ep3_12_b extends ep3_12_a int num=100;private void f()/出错,不可覆盖父类的最终方法System.out.println(num=+num);class ep3_12 public static void main(String args)ep3_12_b One=new ep3_12_b();One.f();需要注意的是:被private声明为私有的方法,以及包含在final类中的方法都被默认为是最终的。用static和fin

33、al两个关键字修饰变量时,若不给定初始值,则按照默认规则对变量初始化。若只用final修饰而不用static,就必须且只能对该变量赋值一次,不能默认。,60,访问修饰符,信息隐藏是 OOP 最重要的功能之一,也是使用访问修饰符的原因Java 语言中有四种不同的访问修饰符,提供了四种不同的访问权限,访问修饰符主要用来修饰成员变量或方法。,访问修饰符,61,访问修饰符,62,1private,用private修饰的成员变量和方法称为私有变量和私有方法,类中限定为private的成员,只能被这个类本身访问。如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。对于私有成员变量和方

34、法,只有在本类中创建该类的对象时,这个对象才可以访问自己的私有成员变量和类中的私有方法,如下例所示:,63,class Ep3_13 private int money;Ep3_13()money=2000;private int getMoney()return money;public static void main(String args)Ep3_13 exa=new Ep3_13();exa.money=3000;int m=exa.getMoney();System.out.println(money=+m);,64,class E4 private int money;priva

35、te E4()money=2000;private int getMoney()return money;class E3public static void main(String args)E4 exa=new E4();exa.money=3000;int m=exa.getMoney();,/The field E4.money is not visible,/The method getMoney()from the type E4 is not visible,/The constructor E4()is not visible,65,class E4 private int m

36、oney;E4()money=2000;int getMoney()return money;int setMoney(int x)Money=x;class E3public static void main(String args)E4 exa=new E4();int m=exa.getMoney();System.out.println(m);exa.setMoney(10);m=exa.getMoney();System.out.println(m);,66,2default 类中不加任何访问权限限定的成员属于缺省的(default)访问状态,可以被这个类本身和同一个包中的类所访问。

37、非本包内的类不能访问。3protected 类中限定为protected的成员,可以被这个类本身、它的子类(包括同一个包中以及不同包中的子类)和同一个包中的所有其他的类访问。4public 用public修饰的成员变量和方法称为共有变量和共有方法,类中限定为public的成员,可以被所有的类访问。在任何一个类中用构造方法创建了一个对象后,这个对象都可以访问自己的public变量和方法。,67,访问修饰符,访问修饰符可访问性,68,包,包是将一些类聚集在一起的一个实体,是Java语言中有效管理类的一个机制。当一个大型程序交由数个不同的程序人员开发时,用到相同的类名是很有可能的,Java程序开发中

38、为了避免这种情况,提供了一个包的概念(package)。同一个包内的类名不允许重复,不同包内可以有相同名称的类。,69,包语句,使用包很简单,通过关键字package声明包语句。package语句作为Java源文件的第一条语句,指明该源文件定义的类所在的包。package语句一般格式为:package packageName;包名可以是一个合法的标识符,也可以是若干个标识符加“.”分割而成,如:package tom;package;如果源文件中省略了package语句,那么源文件定义的类隐含地认为是无名包的一部分,也就是说源文件定义命名的类在同一个包中,但该包没有名字。,70,创建包,pac

39、kage mypackage;public class Calculate public double volume(double height,double width,double depth),71,import语句,在编写程序时,除了自己编写类外,还经常需要使用Java提供的许多类,这些类可能在不同的包中,使用import语句可以引入包中的类。在一个Java源文件中可以有多个import语句,它们在程序中的位置是有要求的,必须写在package语句和源文件的类定义之间。要引入java.util包中的Date类,使用:import java.util.Date;如果要引入一个包中的全部类

40、,则可以用星号来代替,如:import java.awt.*;,72,导入包,package mypackage;import mypackage.Calculate;import java.applet.Applet;import java.awt.*;public class PackageDemo public static void main(String args)Calculate calc=new Calculate();,73,练习,1、下列关于变量的叙述哪个是错的?()A.实例变量是类的成员变量。B.在方法中定义的局部变量在该方法被执行时创建。C.实例变量用关键字static

41、声明。D.局部变量在使用前必须被初始化。解答:C2、不允许作为类及类成员的访问控制符的是()。A.publicB.private C.staticD.protected 解答:C,74,练习,3、为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为()。A、static void method()B、public void method()C、final void method()D、abstract void method()解答:A,75,练习,4、可以在下面代码段point x处写入的是?()/point x public

42、class Interesting/do something A.String str;B.static int PI=3.14;C.public class MyClass/do other thingD.import java.awt.*;解答:D,76,练习,5、已知A类被打包在packageA,B类被打包在packageB,且B类被声明为public,且有一个成员变量x被声明为protected控制方式。C类也位于packageA包,且继承了B类。则以下说法正确的是:()A、A类的实例不能访问到B类的实例B、A类的实例能够访问到B类一个实例的x成员C、C类的实例可以访问到B类一个实例的

43、x成员D、C类的实例不能访问到B类的实例解答:C6、下列命题为真的是:()A、所有类都必须定义一个构造函数。B、构造函数必须有返回值。C、构造函数可以访问类的非静态成员。D、构造函数必须初始化类的所有数据成员。解答:C,77,练习,7、在Java中,关于final关键字的说法正确的是()A、如果修饰变量,则一旦赋了值,就等同一个常量。B、如果修饰类,则该类只能被一个子类继承。C、如果修饰方法,则该方法不能在子类中被覆盖。D、如果修饰方法,则该方法所在的类不能被继承。解答:A,C8、在Java中,下面关于包的陈述中正确的是()A、包的声明必须是源文件的第一句代码。B、包的声明必须紧跟在impor

44、t语句的后面。C、只有公共类才能放在包中。D、可以将多个源文件中的类放在同一个包中。解答:A,D,78,练习,编写一个Java应用程序,该程序中有3个类:Triangle、Leder和Circle,分别用来刻画“三角形”、“梯形”和“圆形”。具体要求如下:a)Triangle类具有类型为double的私有属性三个边长度以及周长,具有返回周长和修改三个边的私有功能。另外,Triangle类还具有一个boolean型的属性,该属性用来判断三个属能否构成一个三角形。b)Lader类具有类型为double的私有属性上底、下底、高、面积,具有返回面积的功能。c)Circle类具有类型为double的私有属性半径、周长和面积,具有返回周长、面积的功能。在一个新的public类中创建并使用三个类的对象:a)Triangle类:创建对象,并使用构造函数进行初始化。计算出周长值并输出;修改三边值并判断是否构成三角形b)Lader类:创建对象并初始化,然后计算面积并输出c)Circle类:创建对象并初始化,然后计算周长、面积并输出,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号