大学教程(从零开始)面向对象编程基础

上传人:sx****84 文档编号:243343870 上传时间:2024-09-21 格式:PPT 页数:96 大小:4.68MB
返回 下载 相关 举报
大学教程(从零开始)面向对象编程基础_第1页
第1页 / 共96页
大学教程(从零开始)面向对象编程基础_第2页
第2页 / 共96页
大学教程(从零开始)面向对象编程基础_第3页
第3页 / 共96页
点击查看更多>>
资源描述
单击鼠标编辑标题文的格式,单击鼠标编辑大纲正文格式,第二个大纲级,第三个大纲级,第四个大纲级,第五个大纲级,第六个大纲级,第七个大纲级,第八个大纲级,第九个大纲级,第,3,章面向对象编程基础,本部分重点,JAVA,语言的类,对象,继承,多态,接口,JAVA,小应用程序基础,3.1,面向对象的基本概念,3.1,面向对象的基本概念,1,抽象,世界是由什么组成的?,名胜,人,物品,动物 ,植物,2,对象,对象的特征属性,属性对象具有的各种特征,每个对象的每个属性都拥有特定值,例如:王小红和朱小雨的体重不一样,60kg,王小红,属性,35,岁,收银员小王,对象的特征方法,方法对象执行的操作,打单,收银,方法,刷卡,收银员王小红,3,类:从对象抽取出类,顾客类,轿车类,类是模子,确定对象将会拥有的特征(属性)和行为(方法),类是对象的类型,不同于,int,类型:具有方法,各种口味的球状冰淇淋,球状冰淇淋模子,类和对象有什么区别呢?,类是抽象的概念,仅仅是模板,比如说:“人”,对象是一个你能够看得到、摸得着的具体实体,比如:“小布什”,小布什,普京,克林顿,“人”类,特征(属性),年龄,体重,行为(方法),衣,食,住,行,4,消息,对象之间的交互通过相互发送消息实现。,10,5,继承,生活中,继承的例子随处可见,动物,食草动物,食肉动物,谁是父类?,谁是子类?,能说出继承的特点吗?,继承需要符合的关系:,is-a,,父类更通用、子类更具体,11,12,子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性,巴士是汽车吗?,卡车是汽车吗?,出租车是汽车吗?,最大载客数量,报站,引擎数量,外观颜色,刹车,加速,汽车,最大载重量,卸货,所属公司,最大载客数量,打发票,属性,行为,13,为什么要使用继承 ?,使用继承,可以有效实现代码复用,14,6,多态,简单来说,多态是具有表现多种形态的能力的特征,同一个实现接口,使用不同的实例而执行不同操作,彩色打印机,打印机,黑白打印机,打印效果:彩色,打印效果:黑白,打印,打印,7,封装,对象同时具有属性和方法两项特性,对象的属性和方法通常被封装在一起,共同体现事物的特性, 二者相辅相承,不能分割,谁看见过只有“完好的零件和颜色”而不能开动的汽车?,3.2Java,的类和对象,所有,Java,程序都以类,class,为组织单元,1.,类,Java类模板,类将现实世界中的概念模拟到计算机程序中,public class,类名,/,定义属性部分,属性,1,的类型 属性,1;,属性,2,的类型 属性,2;,属性,n,的类型 属性,n;,/,定义方法部分,方法,1;,方法,2;,方法,m;,定义类,定义一个类的步骤,1,、定义类名,2,、编写类的属性,3,、编写类的方法,常见错误,public class .Book ,String bookName;,String authorName;,int pageNum;,boolean isAvailable;,类命名规则:,1,、不能使用,Java,关键字,2,、首字母可以为字母,也可以是“,_”,或,“,$,”,(,建议不要这样,),3,、不能包含空格或“,.”,号,代码错误,2.,成员变量,注意:类体内的变量为成员变量;方法内的变量为局部变量,局部变量只在所在的方法中有效。,数据类型总结,int,double,char,String,使用,class,定义的类型,Student,Teacher,School,基本数据类型,引用数据类型,数据类型使用区别,数据类型,特征,声明,使用,基本数据类型,没有方法,int,i= 8;,i+;,引用数据类型,具有方法,Student stu =,new,Student();,stu.age+;,变量作用域,变量声明的位置决定变量作用域,变量作用域确定可在程序中按变量名访问该变量的区域,for(int i = 0, a = 0; i 4; i+),a+;,System.out.println(a);,a,的作用域仅在,for,循环中,代码错误,变量作用域,变量,1,类型 变量,1,;,变量,2,类型 变量,2,;,变量,3,类型 变量,3,;,public,返回类型 方法,1(),变量,4,类型 变量,4;,public,返回类型 方法,2(),变量,5,类型 变量,5,;,public class AutoLion,AutoLion,类的方法,别的类的方法,谁能使用这些变量?,方法,1,方法,2,成员变量,局部变量,局部变量,3.,方法,类的方法,电动玩具狮子,属性:,颜色:黄色,行为:,跑,叫,按此按钮,,狮子开始跑,如何定义类的方法,类的方法定义类的某种行为(或功能,),方法的定义,方法的名称,方法的主体,方法返回的数据类型,定义类的方法,public,返回值类型 方法名,() ,/,这里编写方法的主体,步骤一:定义方法名以及返回值,步骤二:编写方法体,方法的命名,如何给方法起名字?,必须以字母、,_,或开头,可以包括数字,但不能以它开头,遵循的命名规范,通常方法名是一个动词,如果有两个以上单词组成,第一个单词的首字母小写,其后单词首字母大写,方法的返回值,两种情况,如果方法具有返回值,方法中必须使用关键字,return,返回该值,返回类型为该返回值的类型,如果方法没有返回值,返回类型为,void,public class Student,String name =,张三,;,public void getName(),return name;,返回类型要匹配,return,表达式;,编译错误,常见错误,public class School,public static void main(String args),return “北京大学! ;,返回类型是,void,方法中不能有返回值,常见错误,public class Student,public double getInfo(),double weight = 95.5;,double height = 1.69;,return weight, height;,方法至多可以返回一个值,不能返回多个值,方法调用,方法是个“黑匣子”,完成某个特定的应用程序功能,并返回结果,方法调用:执行方法中包含的语句,对象名,.,方法名(),;,方法调用小结,方法之间允许相互调用,不需要知道方法的具体实现,提高了效率,情况,举例,1、类Student 的方法a()调用Student类的方法b(),直接调用,public void,a(),b(); /调用b(),2、类Student的方法a()调用类Teacher的方法b(),先创建类对象,然后使用“.”调用,public void,a(),Teacher t =,new,Teacher();,t.b(); /调用Teacher类的b(),35,this 关键字,如果某方法中的参数名或局部变量的名与类的成员变量的名相同,则成员变量在这个方法内暂时被隐藏。,成员变量在方法内被隐藏,又在方法中要引用成员变量,必须使用,this,关键字。,用于任何实例方法内,指向当前对象,this 的值指向对其调用当前方法的对象,this 关键字可在需要当前类类型的对象引用时使用,this 关键字的示例,class Pixel ,int x;,int y;,void init (int x, int y),this.x = x;,this.y = y;,public static void main (String args),Pixel p = new Pixel();,p.init (4,3);,对象的引用,37,生活中的方法重载,类,方法,方法参数,方法实现,司机,轿车,巴士,火车,驾驶,启动、行驶、,等待乘客上车、启动、,行驶、到站停车、,正点发车、行驶、,到站停车、,如果用代码实现,我们需要三个方法,这些方法的方法名称相同,参数类型不同,38,方法重载必须满足的条件,重载方法必须满足以下条件:,方法名相同。,方法的参数类型、个数、顺序至少有一项不相同。,方法的返回类型可以不相同。,方法的修饰符可以不相同。,调用重载方法时,,Java,使用参数的类型和数量决定实际调用重载方法的哪个版本。,39,方法重载的代码示例,方法重载并不陌生,java.io.PrintStream类的println方法能够打印数据并换行,根据数据类型的不同,有多种实现方式,public class Test ,public static void main(String args) ,int i = 0;,char c = z;,String str = hello;,System.out.println(i);,System.out.println(c);,System.out.println(str);,PrintStream,println(int),println(char),println(String),方法名相同,参数类型不同,调用不同的,println,方法,方法重载,40,4,构造方法,构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值,构造方法必须满足以下语法规则:,1,、方法名与类名相同,2,、没有返回类型,public class Teacher5 ,private String name; /,教员姓名,/,构造方法,public Teacher5() ,name =,无名氏,;,Public Teacher5Test ,public static void main(String args) ,Teacher5 teacher = new Teacher5();,使用,new,关键字调用构造方法,41,带参数的构造方法,通过带参数的构造方法,显式地为实例变量赋予初始值,public class Teacher6 ,private String name; /,教员姓名,private int age; /,年龄,private String education; /,学历,private String position; /,职位,/,带参数的构造方法,Public Teacher6(String pName,int pAge,String pEducation,String,pPosition) ,name = pName;,age = pAge; /,可以增加对,age,等属性的存取限制条件,education = pEducation;,position = pPosition;,public String introduction() ,return,大家好!我是,+ name +,,我今年,+ age +,岁,学历,+ education +,,,目前职位是,+position;,42,带参数的构造方法,通过调用带参数的构造方法,简化对象初始化的代码,public class Teacher6Test ,public static void main(String args) ,Teacher6 teacher = new Teacher6(,李芳,23, ,本科, ,咨询师,);,System.out.println(teacher.introduction();,创建对象时,一并完成了对象成员的初始化工作,大家好!我是李芳,我今年,23,岁,学历本科,目前职位是咨询师,3.2.6,继承,继承是面向对象语言的重要机制。借助继承可以扩展原有的代码,应用到其他程序中,不必重新编写这些代码,在,Java,中,继承是通过扩展原有的类,声明新类来实现的。,扩展声明的新类称为子类,原有的类称为超类(父类),Java,语言不支持多重继承,限定一个类只能有一个超类。,extends,class,子类名,extends,父类名,类体,class E extends D ,如果不指定超类,则该类的超类是系统声明的类,Java.lang.Object,子类自然的继承其父类中,不是,private,的成员变量作为自己的成员变量,并且自然的继承父类中,不是,private,的方法,作为自己的方法。,类的继承原则如下:,子类继承父类的成员变量,包括实例成员变量和类成员变量。,子类继承父类除构造方法以外的成员方法,包括实例成员方法和类成员方法。,重写,子类不满意父类的方法时,在子类中可以根据需要对从父类继承来的方法进行重写。,重写方法必须和被重写方法具有相同的方法名称、参数列表和返回类型。,重写方法不能使用比被重写方法更严格的访问权限。,TestOverWrite.java,与重载,(overload),的区别,:,重载是函数名同,参数不同。,重写,子类,Dau,中声明了方法,dance,(),跟父类(超类)中的方法的名字,个数,类型完全相同,超类的方法在子类中被隐藏。,子类对象调用,dance,()时,自然调用子类的,dance,()方法。,超类方法在子类中隐藏称为重写或置换。,子类对成员变量的隐藏和方法的重写可以把超类的状态和行为改变为自身的状态和行为。,例如下面的这段程序就是这样的情况:,class SuperClass /,父类,int y;,void setY(),y=0;,class SubClass extends SuperClass,int y;,/,父类变量,y,被隐藏,void setY(),/,重写父类的方法,setY(),y=1;,class Parent,public void,function(),System.out.println(I am in Parent!);,class Child extends Parent,private void,function(),System.out.println(I am in Child!);,public class RTpolyTest,public static void main(String args),Parent pl=new Parent( );,Parent p2=new Child( );,p1.function( );,p2.function( );,方法重写的例子,(1),多态性,动态联编,(,动态绑定,),:编译时暂不绑定调用哪个方法,而是在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。,new,出对象来之后才能确定到底调用哪一个方法。,(2),多层继承,多层继承,继承声明的新类,又可以被其他类再继承,从而构成多层继承。,(,3,)多层继承中构造方法的调用顺序,构造方法的调用顺序与类的继承顺序一致,从最高层次的超类开始,按继承顺序调用各类的构造方法。,如果子类的构造方法要调用超类的构造方法,给从超类继承的成员变量初始化,用,super,。,关键字,super,用来引用基类的成分。,this,:指向对象本身。,super,:指向当前对象的父对象。,继承中的构造方法,子类的构造过程必须调用其基类的构造方法。,先构造父类对象,再把剩下的东西造出来,使用,super(,参数列表,),调用基类的构造方法;,使用,this(,参数列表,),调用本类的另外的构造方法。,如果调用了,super,,必须写在子类构造方法的第一行。,如果子类的构造方法中没有显式地调用基类构造方法,则系统默认调用基类无参数的构造方法。,如果子类构造方法中既没有显式地调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。,3.2.7 java,面向对象的其他机制,final,类,,final,方法,,final,变量,final,的类不能够被继承。,final class D ,class M extends D,错误,final,的方法不能够被重写。,final,修饰变量,声明该变量的值不能被改变,相当于常量。,final,的成员变量,final,的局部变量(形参),final,int,variableName,=10,;,final,int,a,;,a=1,;,a=2,错误,习惯常量名用大写,abstract,用,abstract,关键字来修饰一个类时,这个类叫做抽象类。用,abstract,关键字来修饰一个方法时,这个方法叫做抽象方法。,含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。,(,子类去实现,),抽象类不能被实例化。,抽象方法只需声明,不需实现。,super,子类隐藏了超类的成员变量或者覆盖了超类方法后,利用,super,,子类可以引用超类的成员变量或被覆盖的方法,使用,3,种情况:,使用,super,调用超类的构造方法,使用,super,调用超类被子类覆盖的方法,使用,super,访问超类被子类隐藏的成员变量,this,关键字,this,用来指自己。,this,有多种作用,例如,将对象自己作为参数,调用别的方法,.,当方法的局部变量隐藏成员变量时,利用,this,引用成员变量,在构造函数内调用另一构造函数。,class Point,int,x,y,;,Point(),x=10; y=20;,Point(int,x,int,y),this.x,=x;,this.y,=y;,Point p1,,,p2,class B,int b,,,c,;,B,(), this,(,2,,,3,);,B,(,int x,,,int y,),b=x,;,c=y,;,类之间的,is-a,和,has-a,关系,如果类,A,是扩展类,B,,则子类,A,和超类,B,之间是,is-a,关系。类,B,的所有成员 类,A,也有。,如果类,A,的某个成员变量的类型是,B,,则类,A,和类,B,之间是,has-a,关系,类,A,包含类,B,内部类,Java,也允许在类声明内部嵌套类声明。嵌套的类可以是静态的或者是非静态的。静态类不能直接引用其他包含类的成员,必须实例化。,非静态的嵌套类,因为需要进行事件处理,非常流行,3.3,接口,Java,程序中类只能继承一个类,这种继承称为单继承。,Java,虽然不允许一个类继承多个类,但允许一个类实现多个接口。接口有与类相似的基本形式。,接口有常量的定义和方法定义,但没有方法的实现代码。,类除了能继承一个类外,可以实现多个接口。,1,、接口的定义,public interface,接口名,extends,超接口表,接口体,接口名通常以,able,或,ible,结尾。接口是一种只能由常量定义和抽象方法组成的特殊类。用,public,修饰的接口是公共接口,可以被所有的类和接口使用。没有的只能被同一个包中的其他类和接口使用。,2,、接口体,接口体中的内容是一系列常量定义和方法定义。其中方法定义是一种方法声明,不提供方法的实现。用;结尾,interface Sleepable,final int MAX=100;,void sleepSometime(int daltaT);,float work(float x,float y);,接口的所有变量都默认是,final static,属性,所有的方法都默认为,public abstract,属性。,一个类可以用,implements,声明自己使用一个或多个接口,实现多个接口时,接口名用逗号隔开。,class pig extends Animal implements Eatable,,,Sleepable,如果一个类要实现一个接口,那必须实现该接口的所有方法,为这些方法提供实现的方法体。,实现必须完全一致,并用,public,修饰。,3.4,基本类,基本类型值与基本类对象能相互转换。可以利用以下形式的基本类构造方法,由基本类型值得到对应基本类对象。,public,基本类(基本类型,v,),例如,Integer n=new Integer,(,123,),;,也可以由基本类对象到基本类型值。,设有一个,Double,类对象,dobj,,,double d=,dobj.doubleValue,();,boolean,b=,bobj.booleanValue,();,3.5 Java,小应用程序,每个小程序都继承,java.applet.Applet,如果小应用程序已经用,import java.applet.Applet,导入系统,Applet,类,小应用程序的主类,public class,主类名,extends Applet,如果未用,import,导入系统,Applet,,则主类声明:,public,类名,extends java.applet.Applet,小应用程序不能调用本地的应用程序和动态时的动态数据库等,1,、小应用程序的建立和运行,一个小应用程序从建立到运行,4,步骤,(1),用,Java,语言编写小程序的源程序,(2),把小应用程序的源程序编译成字节码,.class,文件,(3),将应用程序的字节码文件嵌入,web,页中,设计一个指定小应用程序的,html,文件,.html,(4),在支持,Java,的浏览器上运行,.,2,、,Applet,类的基本方法,1,init( ),初始化,由浏览器载入内存时调用,init,(),该方法只运行一次,2,start( ),初始化后,紧接着调用,start,()方法,启动小应用程序主线程,或当用户从小应用程序所在的,web,页面转到其他页面,然后又返回时,,start,()方法再次被调用。,3,stop( ),当浏览器离开小应用程序所在的页面转到其他页面,调用,stop,()方法,挂起小应用程序的执行。,4,destroy( ),当关闭浏览器时,调用,destroy,()方法,结束小应用程序的生命,关闭线程释放对象资源。,5,、,paint,(,Graphics g,)方法,该方法用于在屏幕上显示某些信息。如文字,色彩,背景图像等。,6,、,repaint,()方法,为在,java,页面上显示动态效果,需要,repaint,方法,先清除,paint,方法以前所画的内容,然后再调用,paint(),方法。,7,、,update,()方法,调用,repaint,()方法时,系统会自动调用,update,方法。,import java.awt.*;,import java.applet.*;,public class e324 extends Applet ,String ;,public void init() ,sleeptime=getParameter(sleeptime);,();,public void paint(Graphics g) ,g.drawString(sleeptime, 50, 60 );,g.drawString(, 80, 80 );,class Complex,double a,b; /a,为实部,,b,为虚部,a+bi,Complex(),Complex(int a,int b),this.a=a;,this.b=b;,public String print()/,输出复数,返回复数的字符串表示形式,String result=new String(this.a+(b0)?+:)+(b!=0)?this.b+i:);,return result;,public double getA()/,取复数实部,返回复数的实部,return a;,public double getB()/,取复数的虚部,返回复数的虚部,return b;,3.6,子类在什么情况下能隐藏超类的成员变量和方法?,解:子类重载父类的成员变量、方法时候。,3.7,在子类中是否允许有一个方法和超类的方法名字相同,而类型不同?,解:方法重写是指:子类中定义一个方法,并且这个方法的名字、返回类型、参数个数、和类型与从父类继承的方法完全相同。,public Complex add(Complex val) /,复数加法,返回当前复数对象与参数指定的复数对象的和,Complex result=new Complex();,result.a=this.a+val.a;,result.b=this.b+val.b;,return result;,public Complex subtract(Complex val) /,复数减法,返回当前复数对象与参数指定的复数对象的差,当前对象减去参数对象,Complex result=new Complex();,result.a=this.a-val.a;,result.b=this.b-val.b;,return result;,public Complex multiply(Complex val)/,复数乘法,返回当前复数对象与参数指定的复数对象的积,Complex result=new Complex();,result.a=this.a*val.a-this.b*val.b;,result.b=this.a*val.b+this.b*val.a;,return result;,public Complex divide(Complex val)/,复数除法,返回当前复数对象与参数指定的复数对象的商,当前对象除以参数对象,Complex result=new Complex();,result.a=(this.a*val.a+this.b*val.b)/(val.a*val.a+val.b*val.b);,result.b=(this.b*val.a-this.a*val.b)/(val.a*val.a+val.b*val.b);,return result;,/,测试程序,对复数的加减乘除运算,和打印复数,取复数实部、虚部,public class k313,public static void main(String args),Complex complex1=new Complex(2,9),complex2=new Complex(12,-2);,Complex result=new Complex();,System.out.println(,复数,1,:,+complex1.print()+,;实部,+complex1.getA()+,;虚部,+complex1.getB();,System.out.println(,复数,2,:,+complex2.print()+,;实部,+complex2.getA()+,;虚部,+complex2.getB();,result=complex1.add(complex2);/,两个复数之和,System.out.println(,复数:,+complex1.print()+,与,+,复数:,+complex2.print()+,之和为:,+result.print();,result=complex1.subtract(complex2);/,两个复数之差,System.out.println(,复数:,+complex1.print()+,与,+,复数:,+complex2.print()+,之差为:,+result.print();,result=complex1.multiply(complex2);/,两个复数乘积,System.out.println(,复数:,+complex1.print()+,与,+,复数:,+complex2.print()+,的乘积为:,+result.print();,result=complex1.divide(complex2);/,两个复数的商,System.out.println(,复数:,+complex1.print()+,与,+,复数:,+complex2.print()+,的商为:,+result.print();,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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