java程序设计 教学 教案 课件 04-2

上传人:da****ge 文档编号:243096213 上传时间:2024-09-15 格式:PPT 页数:73 大小:788.50KB
返回 下载 相关 举报
java程序设计 教学 教案 课件 04-2_第1页
第1页 / 共73页
java程序设计 教学 教案 课件 04-2_第2页
第2页 / 共73页
java程序设计 教学 教案 课件 04-2_第3页
第3页 / 共73页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第四章 类、对象和接口,4.2,对象,类是创建对象的模板,创建对象:,对象的声明,为对象分配内存,4.2,对象,1,、对象的声明:,格式:类的名字 对象名字;,如:,People,zhangPing,;,4.2,对象,2,、为声明的对象分配内存:,使用,new,运算符和类的构造方法为声明的对象分配内存,如果类中没有构造方法,系统会调用默认的构造方法(默认的构造方法是无参数的)。,如:,zhangPing,=new People();,4.2,对象,class,XiyoujiRenwu,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, ),XiyoujiRenwu,zhubajie,; /,声明对象,zhubajie,=new,XiyoujiRenwu,(); /,为对象分配内存,使用,new,运算符和默认的构造方法,例:,1,4.2,对象,class Point,int,x,y;,Point(int,a,int,b),x=a;,y=b;,public class A,public static void main(String,args,),Point p1,p2; /,声明对象,p1,和,p2,。,p1=new Point(10,10); /,为对象分配内存,使用,new,和类中的构造方法。,p2=new Point(23,35); /,为对象分配内存,使用,new,和类中的构造方法。,例:,2,练习,用课本,P45,类梯形创建一个名为“,tx,”,的对象,4.2,对象,3,、对象的内存模型:,声明对象时的内存模型,声明对象变量后,变量内存无数据,是空对象,不能使用,如:,XiyoujiRenwu,zhubajie,;,zhubajie,4.2,对象,3,、对象的内存模型:,对象分配内存后的内存模型,为成员变量分配内存,返回一个应用给对象变量,如,zhubajie,=new,XiyoujiRenwu,();,0.0,0.0,null,null,null,null,null,0xAB12,zhubajie,weight,height,head,ear,mouth,hand,foot,4.2.2,使用对象,使用运算符,“,.” ,对象实现对自己的变量访问和方法的调用,对象操作自己的变量,(,对象的属性,),对象创建后,就有自己的变量。通过使用运算符“,.”,对象实现对自己变量的访问。,对象调用类中的方法,(,对象的功能,),采用“,.”,调用创建它的类中的方法。,当对象调用类中的一个方法时,方法中的局部变量被分配到内存空间,4.2.2,使用对象,class,XiyoujiRenwu,float,height,weight,;,String head,ear,hand,foot,mouth,;,void,speak(String,s),head=,歪着头,;,System.out.println(s,);,public class Example,public static void,main(String,args,),XiyoujiRenwu,zhubajie,sunwukong,;/,声明对象。,zhubajie,=new,XiyoujiRenwu,();/,为对象分配内存,使用,new,运算符和默认构造方法。,sunwukong,=new,XiyoujiRenwu,();,zhubajie.height,=1.80f; /,对象给自己的变量赋值。,zhubajie.weight,=160f;,zhubajie.hand,=,两只黑手,;,zhubajie.foot,=,两只大脚,;,zhubajie.head,=,大头,;,zhubajie.ear,=,一双大耳朵,;,zhubajie.mouth,=,一只大嘴,;,sunwukong.height,=1.62f; /,对象给自己的变量赋值。,sunwukong.weight,=1000f;,sunwukong.hand,=,白嫩小手,;,sunwukong.foot,=,两只绣脚,;,sunwukong.head,=,绣发飘飘,;,sunwukong.ear,=,一对小耳,;,sunwukong.mouth,=,樱桃小嘴,;,System.out.println(zhubajie,的身高:,+,zhubajie.height,);,System.out.println(zhubajie,的头:,+,zhubajie.head,);,System.out.println(sunwukong,的重量:,+,sunwukong.weight,);,System.out.println(sunwukong,的头:,+,sunwukong.head,);,zhubajie.speak,(,俺老猪我想娶媳妇,); /,对象调用方法。,System.out.println(zhubajie,现在的头:,+,zhubajie.head,);,sunwukong.speak,(,老孙我重,1000,斤,我想骗八戒背我,); /,对象调用方法。,System.out.println(sunwukong,现在的头:,+,sunwukong.head,);,4.2.2,使用对象,类中的方法可以操作成员变量,当对象调用该方法时,方法中出现的成员变量就是指该对象的成员变量。,练习,打印梯形的面积:(上底为,2.0,,下底为,5.0,,高为,3.0,),用课本,P45,梯形类,4.2.3,对象的应用和实体,当用类创建一个对象时,类中的成员变量被分配内存空间,这些内存空间被称作该对象的实体。,对象中存放着应用,确保实体由该对象操作使用。,4.2.3,对象的应用和实体,如:,Point p1=new Point(12,16);,Point p2=new Point(6,18);,p1=p2;,12,16,6,18,0xAB28,0xDD,6,18,X,y,X,y,X,y,0xDD,0xDD,p1,p2,p2,p1,4.2.3,对象的应用和实体,例,4,:,class,圆,double,半径,;,圆,(double r),半径,=r;,double,计算面积,(),return 3.14*,半径*半径,;,void,修改半径,(double,新半径,),半径,=,新半径,;,double,获取半径,(),return,半径,;,4.2.3,对象的应用和实体,class,圆锥,圆 底圆,;,double,高,;,圆锥,(,圆,circle,double,h),this.,底圆,=circle;,this.,高,=h;,double,计算体积,(),double volume;,volume=,底圆,.,计算面积,()*,高,/3.0;,return volume;,void,修改底圆半径,(double r),底圆,.,修改半径,(r);,double,获取底圆半径,(),return,底圆,.,获取半径,();,4.2.3,对象的应用和实体,class Example,public static void,main(String,args,),圆,circle=new,圆,(10);,圆锥,circular=new,圆锥,(circle,20);,System.out.println,(,圆锥底圆半径,:+circular.,获取底圆半径,();,System.out.println,(,圆锥的体积,:+circular.,计算体积,();,circular.,修改底圆半径,(100);,System.out.println,(,圆锥底圆半径,:+circular.,获取底圆半径,();,System.out.println,(,圆锥的体积,:+circular.,计算体积,();,4.3 static,关键字,1,、实例变量和类变量的区别,不同对象的实例变量将被分配不同的内存空间,如果类中的成员变量有类变量,那么所有对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其它对象的这个类变量。,也就是说,对象共享类变量,4.3 static,关键字,例子,5,class,梯形,float,上底,高,;,static float,下底,; /,类变量。,梯形,(float,上底,float,高,),this.,上底,=,上底,;,this.,高,=,高,;,float,获取上底,(),return,上底,;,float,获取下底,(),return,下底,;,4.3 static,关键字,class Example4_5,public static void,main(String,args,),梯形,laderOne,laderTwo,; /,梯形的字节码被加载到内存。,梯形,.,下底,=60; /,通过类名操作类变量。,laderOne,=new,梯形,(18.0f,20);,laderTwo,=new,梯形,(9.0f,10);,System.out.println(laderOne,的上底,:+,laderOne,.,获取上底,();,System.out.println(laderOne,的下底,:+,laderOne,.,获取下底,();,System.out.println(laderTwo,的上底,:+,laderTwo,.,获取上底,();,System.out.println(laderTwo,的下底,:+,laderTwo,.,获取下底,();,4.3 static,关键字,2,、实例方法和类方法的区别,当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,当该类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对象调用执行。,类中的类方法,在该类被加载到内存时,就分配了相应的入口地址。,4.4 this,关键字,1,、,this,关键字可以出现在类的实例方法中,代表使用该方法的当前对象。,2,、,this,关键字出现在类的构造方法中,代表使用该构造方法所创建的对象。,实例方法可以操作类的成员变量。,格式:,this.,成员变量,4.4 this,关键字,如:,class A,int,x;,void f(),this.x,=100;,/,此例子没有同名的成员变量和局部变量,,this,可以省略,4.4 this,关键字,如:,class B,void f(),this.g,();,void g(),System.out.println(“OK,”);,/,此例子中,this,代表使用方法,f,的当前对象,方法发,f,的方法体中,this.g,(),就是当前对象调用方法,g.,一个方法调用另一个方法时可以省略方法名字前面的,this,4.5,包,1,、包语句,通过关键字,package,声明包语句。,package,作为,Java,源文件的第一条语句。,package,语句的一般格式,:,package,包名;,如:,package sunrise;,package,;,4.5,包,如果源程序中省略了,package,语句,源文件所定义命名的类被隐含地认为是无名包的一部分,即源文件中定义命名的类在同一个包中,但该包没有名字。,4.5,包,程序如果使用了包语句,就必须有相应的目录结构。,如:,package,tom.jafei,;,则目录结构必须包含如下结构:,tom,jiafei,4.5,包,例,6,:,package,tom.jiafei,;,public class Example4_6,public static void,main(String,args,),System.out.println,(,我有包名,);,4.5,包,2,、,import,语句,使用,import,语句可以引入包中的类。,在一个,java,源程序中可以有多个,import,语句,他们必须写在,package,语句和源文件中的类的定义之间,4.5,包,2,、,import,语句,Java,提供的包有很多,约,130,多个,如:,java. applet,包含所有实现,java applet,的类,java.awt,包含抽象窗口工具集中的图形、文本、窗口,GUI,类,java.awt.image,包含抽象窗口工具集中的图像处理类,java.lang,包含所有基本语言类,java.io,包含所有的输入,/,输出类,包含所有实现网络功能的类,java.until,包含有用的数据类型类,4.5,包,引入类:,如果要引入一个包中的全部类,则可以用星号来代替,如:,import,java.awt,.*;,只引入一个确定的类,则直接写明引用,如:,import,java.until.Date,4.5,包,例,7,:,import,java.applet.Applet,;,import,java.awt,.*;,public class Example extends Applet,Button,redbutton,;,public void init(),redbutton,=new Button(,我是一个红色的按钮,);,redbutton.setBackground(Color.red,);,add(redbutton,);,public void,paint(Graphics,g),g.drawString(it,is a button,30,50);,例,8,import,tom.jiafei,.*;,class Example4_8,public static void,main(String,args,),Trangle,trangle,=new Trangle(12,3,1);,trangle,.,计算面积,();,trangle,.,修改三边,(3,4,5);,trangle,.,计算面积,();,4.6,访问权限,1.,私有变量和私有方法,2.,共有变量和共有方法,3.,友好变量和友好方法,4.,受保护成员变量和方法,5.public,类与友好类,4.6,访问权限,1.,私有变量和私有方法,用关键字,private,修饰的成员变量和方法被称为私有变量和私有方法,如:,class Tom,private float weight; /weight,私有的,float,变量,private float,f(float,a, float b) /,方法,f,是私有方法,4.6,访问权限,对于私有成员变量或方法,在另外一个类中,不能操作这个私有变量或方法,只有在本类中创建该类的对象的时候,才能访问自己的私有变量和类中的私有方法。,class Jerry,void g(),Tom cat=new Tom();,cat.weight,=23f;/,非法,cat.f(3f,4f);/,非法,4.6,访问权限,class Example4_9,private,int,money;,Example4_9(),money=2000;,private,int,getMoney,(),return money;,public static void,main(String,args,),Example4_9,exa,=new Example4_9();,exa.money,=3000;,int,m=,exa.getMoney,();,System.out.println(money,=+m);,类中访问自己的私有成员变量和私有方法,4.6,访问权限,2.,共有变量和共有方法,用关键字,public,修饰的成员变量和方法被称为共有变量和共有方法,如:,class Tom,public float weight; /weight,共有的,float,变量,public float,f(float,a, float b) /,方法,f,是共有方法,4.6,访问权限,对于共有成员变量或方法,在另外一个类中,能操作这个变量或方法。,class Jerry,void g(),Tom cat=new Tom();,cat.weight,=23f;/,合法,cat.f(3f,4f);/,合法,4.6,访问权限,3.,友好变量和方法,不用,private,、,public,、,protected,修饰的成员变量和方法被称为友好变量和友好方法。,如:,class Tom,float weight; /weight,友好的,float,变量,float,f(float,a, float b) /,方法,f,是友好方法,4.6,访问权限,在同一个包中,那么能访问自己的友好变量和友好方法。,class Jerry,void g(),Tom cat=new Tom();,cat.weight,=23f;/,合法,cat.f(3f,4f);/,合法,4.6,访问权限,4.,受保护的成员变量和方法,用关键字,protected,修饰的成员变量和方法被称为受保护的成员变量和受保护的方法,如,:,class Tom,protected float weight; /weight,受保护的,float,变量,protected float,f(float,a, float b) /,方法,f,是受保护的方法,4.6,访问权限,当在另外一个类中用类,Tom,创建一个对象后,如果这个类与类,Tom,在同一个包中,那么该对象能访问自己的,protected,变量和方法,.,也可以通过类名访问,class Jerry,void g(),Tom cat=new Tom();,cat.weight,=23f;/,合法,cat.f(3f,4f);/,合法,4.6,访问权限,5.public,类与友好类,类声明时,如果在关键字,class,前面加上,public,关键字,就称这样类是一个,public,类,如,: public class A,如果一个类不加,public,修饰,则为友好类,如:,class A,4.6,访问权限,5.public,类与友好类,不能用,protected,和,private,修饰类,访问权限的排列:,public,、,protected,、友好的、,private,4.7,类的继承,继承是一种用已有类创建新类的机制。,新类继承一般类的状态和行为,并根据需要增加它自己的新的状态和行为。,由继承而得到的类成为子类,被继承的类称为父类(超类)。,Java,不支持多重继承(子类只能有一个父类),4.7,类的继承,1.,创建子类,在声明中,使用关键字,extends,来创建一个类的子类,格式:,class,子类名,extends,父类名,4.7,类的继承,1.,创建子类,例,:,把,Student,声明为,People,的子类,People,是,Students,的父类,.,class Student extends People,4.7,类的继承,2.,子类的继承性,子类继承父类的成员变量,继承父类的方法,.,4.7,类的继承,2.,子类的继承性,子类和父类在同一包种的继承性,如果子类和父类在同一个包中,那么子类自然地继承了其父类中不是,private,的成员变量作为自己的成员变量,并且也自然地继承了父类中不是,private,的方法作为自己的方法,.,继承的成员或方法的访问权限保持不变,.,class Father,private,int,money;,int,weight=100;,String,speak(String,s),return s ;,class Son extends Father,String hand ;,void f(),weight=200;,System.out.println(weight,);,class,Suizi,extends Son,String foot ;,public class Example4_10,public static void,main(String,args,),Son,son,=new Son();,Suizi,sunzi,=new,Suizi,();,son.hand,=,两只手,;,sunzi.hand,=,两小只手,;,sunzi.foot,=,两只脚,;,System.out.println(son.hand,);,son.f,();,System.out.println(sunzi.weight+:+sunzi.hand+:+sunzi.foot,);,System.out.println(sunzi.speak,(,我是孙子,);,4.7,类的继承,2.,子类的继承性,子类和父类不在同一包种的继承性,如果子类和父类不在同一个包中,那么子类继承了父类的,protected,、,public,成员变量作为子类的成员变量,并且继承了父类的,protected,、,public,方法为子类的方法。继承的成员或方法的访问权限保持不变,.,如果子类和父类不在同一个包里,子类不能继承父类的友好变量和友好方法。,Father.java,:,package,tom.jiafei,;,public class Father,int,height;,protected,int,money=120;,public,int,weight;,protected,int,getMoney,(),return money;,void,setMoney(int,newMoney,),money=,newMoney,;,Jerry.java,package,;,import,tom.jiafei.Father,;,public class Jerry extends Father /Jerry,和,Father,在不同的包中,.,void f(),money=1000; /,合法,/height=1.89f; /,非法,因为,Jerry,没有继承友好的,height,System.out.println(money,); /,输出结果是,1000,。,/setMoney(300); /,非法,因为,Jerry,没有继承友好的方法,setMoney,。,int,number=,getMoney,(); /,合法,.,System.out.println(number,); /,输出结果是,1000,。,public static void,main(String,args,),Jerry,jerry,=new Jerry();,jerry.f,();,4.7,类的继承,2.,子类的继承性,protected,的进一步说明,一个类,A,中的,protected,成员变量和方法可以被它的直接子类和间接子类继承,如:,B,是,A,的子类,,C,是,B,的子类,,D,又是,C,的子类,那么,B,、,C,和,D,类都继承了,A,的,protected,成员变量和方法。,如果用,D,类在,D,本身中创建了一个对象,那么该对象总是可以通过“,.”,运算符访问继承的或自己定义的,protected,变量和,protected,方法。,如果在另外一个类中,比如,Other,类,用,D,类创建了一个对象,object,,该对象通过“,.”,运算符访问,protected,变量和,protected,方法的权限如下:,4.7,类的继承,如果在另外一个类中,比如,Other,类,用,D,类创建了一个对象,object,,该对象通过“,.”,运算符访问,protected,变量和,protected,方法的权限如下:,子类,D,中亲自声明的,protected,成员变量和方法,不可能是从别的类继承来的,,object,访问这些非继承的,protected,成员变量和方法时,只要,Other,类和,D,类在同一个包中就可以,如果子类,D,的对象的,protected,成员变量或,protected,方法是从父类继承的,那么就要一直追溯到该,protected,成员变量或方法的“祖先”类,即,A,类。如果,Other,类和,A,类在同一个包,,object,对象能访问继承的,protected,变量和,protected,方法。,A.java,:,package,tom.jiafei,;,public class A,protected,int,x=120;,protected void,fA,(),System.out.println,(,我是,A,类中的,protected,方法,);,System.out.println(x,=+x);,B.java,:,package,;,import,tom.jiafei.A,;,public class B extends A,protected void,fB,(),System.out.println,(,我是,B,类中自己定义的方法,);,public static void,main(String,args,),B b=new B(); /,对象,b,在,B,类中,.,b.x,=1000; /,合法,.,b.fA,(); /,合法,.,b.fB,(); /,合法,.,DL.java,package,;,import,.B,;,public class DL,public static void,main(String,args,),B b=new B(); /,对象,b,在,DL,类中,.,b.x,=1000;,/,非法,因为对象,b,的成员变量,x,是从,A,类继承的,但,DL,和,A,不在同一包中,.,b.fA,();,/,非法,.,因为方法,fA,是,B,类从,A,类继承的,protected,方法,但,DL,和,A,不在同一包中,.,b.fB,();,/,合法,因为方法,fB,是,B,类中自己定义的,protected,方法, DL,类和,B,类在同一包中,.,Example.java,package,tom.jiafei,;,import,.B,;,public class Example,public static void,main(String,args,),B b=new B(); /,对象,b,在,Example,类中,.,b.x,=1000;,/,合法,因为对象,b,的成员变量,x,是从,A,类继承的,而,Example,和,A,在 同一包中,.,b.fA,();,/,合法,.,因为方法,fA,是,B,类从,A,类继承的,protected,方法,而,Example,和,A,在同一包中,.,b.fB,();,/,非法,因为方法,fB,是,B,类中自己定义的,protected,方法,但,Example,类和,B,类不在同一包中,.,a,4.7,类的继承,3.,成员变量的隐藏和方法的重写,成员变量隐藏:如果在子类中定义的成员变量和父类的成员变量同名时,则父类中的成员变量不能被继承,此时称为子类的成员变量隐藏了父类的成员变量。,方法重写:如果子类中定义了一个方法,并且这个方法的名字、返回类型以及参数个数和类型同父类的某个方法完全相同,父类的这个方法将被隐藏,则称重写父类的方法。,4.7,类的继承,3.,成员变量的隐藏和方法的重写,子类通过成员变量的隐藏和方法的重写可以把父类的状态和行为改变成为自身的状态和行为。,例子,12,import,java.applet,.*;,import,java.awt,.*;,class A,private,int,number=100;,float,f(int,x,int,y),return,x+y,;,float,g(float,x,float,y),return,x+y+number,;,class B extends A,float,f(int,x,int,y),return x*y;,public class Example,public static void,main(String,args,),B b=new B();,System.out.println(b.f(2,5); /,调用重写的方法。,System.out.println(b.g(2,5); /b,调用继承的父类的方法。,4.7,类的继承,3.,成员变量的隐藏和方法的重写,重写父类的方法时,不能降低方法的访问权限。,import,java.applet,.*;,import,java.awt,.*;,class A,private,int,number=100;,protected float,f(int,x,int,y),return,x+y,;,float,g(float,x,float,y),return,x+y+number,;,class B extends A,float,f(int,x,int,y),return x*y;,class C extends A,public float,f(int,x,int,y),/,合法,没有降低访问级别,return,x-y,;,4.7,类的继承,4.final,类,final,方法,Final,类不能被继承,即不能有子类,Final class A,A,就是一个,final,类。,出于安全的考虑,将一些类修饰为,final,类。,如果一个方法被修饰为,final,方法,则这个方法不能被重写。如果一个成员变量被修饰为,final,,就是常量。,作业,包语句的格式是什么?包语句在,Java,源文件什么位置?,如何引入包中的类?,用,public,、,protected,、友好的、,private,修饰的方法访问权限的级别排列顺序是怎样的?,什么是类的继承?,Java,是否支持多重继承?,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!