面向对象编程基础

上传人:lx****y 文档编号:243386565 上传时间:2024-09-22 格式:PPT 页数:64 大小:1.06MB
返回 下载 相关 举报
面向对象编程基础_第1页
第1页 / 共64页
面向对象编程基础_第2页
第2页 / 共64页
面向对象编程基础_第3页
第3页 / 共64页
点击查看更多>>
资源描述
单击鼠标编辑标题文的格式,单击鼠标编辑大纲正文格式,第二个大纲级,第三个大纲级,第四个大纲级,第五个大纲级,第六个大纲级,第七个大纲级,第八个大纲级,第九个大纲级,单击鼠标编辑标题文的格式,单击鼠标编辑大纲正文格式,第二个大纲级,第三个大纲级,第四个大纲级,第五个大纲级,第六个大纲级,第七个大纲级,第八个大纲级,第九个大纲级,单击鼠标编辑标题文的格式,单击鼠标编辑大纲正文格式,第二个大纲级,第三个大纲级,第四个大纲级,第五个大纲级,第六个大纲级,第七个大纲级,第八个大纲级,第九个大纲级,Java,语言程序设计(一),串讲,主讲人,:,更多优质自考资料尽在百度贴吧自考乐园俱乐,部,()欢迎加入.欢迎交流.止不住的惊喜等着你.,面向对象编程基础,本部分重点,JAVA,语言的类,对象,继承,多态,接口,JAVA,小应用程序基础,世界是由什么组成的?,名胜,人,物品,动物 ,植物,面向对象编程基础,对象的特征属性,属性对象具有的各种特征,每个对象的每个属性都拥有特定值,例如:王小红和朱小雨的体重不一样,60kg,王小红,属性,35,岁,收银员小王,对象的特征方法,方法对象执行的操作,打单,收银,方法,刷卡,收银员王小红,封装,对象同时具有属性和方法两项特性,对象的属性和方法通常被封装在一起,共同体现事物的特性, 二者相辅相承,,不能分割,谁看见过只有“完好的零件和颜色”而不能开动的汽车?,类:从对象抽取出类,顾客类,轿车类,类是模子,确定对象将会拥有的特征(属性)和行为(方法),类是对象的类型,不同于,int,类型:具有方法,各种口味的球状冰淇淋,球状冰淇淋模子,类和对象有什么区别呢?,类是抽象的概念,仅仅是模板,比如说:“人”,对象是一个你能够看得到、摸得着的具体实体,比如:“小布什”,小布什,普京,克林顿,“人”类,特征(属性),年龄,体重,行为(方法),衣,食,住,行,Java,是面向对象的语言,所有,Java,程序都以类,class,为组织单元,关键字,class,定义自定义的数据类型,public class HelloWorld ,public static void main(String args) ,System.out.println(,使用,Java,语言理解程序逻辑,);,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,、不能包含空格或“,.”,号,代码错误,如何创建和使用对象,使用对象的步骤:,使用,new,创建类的一个对象,使用对象:使用“,.”,进行以下操作,给类的属性赋值:对象名,.,属性,调用类的方法:对象名,.,方法名,(),School,center,= new School();,center,.schoolName = “,北京大学,; /,给属性赋值,center,.toString(); /,调用类的方法,该方法中的操作将被执行,面向对象(OO)的优点,便于程序模拟现实世界中的实体,用“类”表示实体的特征和行为,隐藏细节,对象的行为和属性被封装在类中,外界通过调用类的方法来获得,不需关注内部细节如何实现,可重用,可以通过类的模板,创建多个类的对象,数据类型总结,int,double,char,String,使用,class,定义的类型,Student,Teacher,School,基本数据类型,引用数据类型,数据类型使用区别,数据类型,特征,声明,使用,基本数据类型,没有方法,int,i= 8;,i+;,引用数据类型,具有方法,Student stu =,new,Student();,stu.age+;,类的方法,写出狮子对象的“跑”方法,写出狮子对象的“叫”方法,电动玩具狮子,属性:,颜色:黄色,行为:,跑,叫,按此按钮,,狮子开始跑,如何定义类的方法,类的方法定义类的某种行为(或功能),方法的定义,方法的名称,方法的主体,方法返回的数据类型,定义类的方法,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(),变量作用域,变量声明的位置决定变量作用域,变量作用域确定可在程序中按变量名访问该变量的区域,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,成员变量,局部变量,局部变量,面向对象的编程思维,ScoreCalc类 和 Test类,public static void main(String args) ,Scanner input = new Scanner(System.in);,System.out.print(,请输入,Java,成绩:,);,int java = input.nextInt();,/*,计算并显示输出*,/,int total = java + c + db;,double avg = total / 3;,System.out.print(,总成绩:, + total);,System.out.print(n,平均分,: + avg);,一次还可以接受,如果,还要再执行这个功能,,难道还要重复再写?,calcDiffTime,calcTotalScore(),ScoreCalc,showTotalScore(),calcAvg(),showAvg(),main() /,程序入口,/,计算并输出总成绩,/,计算并输出平均分,Test,调用,调用,类的方法实现某个特定的功能,,别的类不需要知道它如何实现!,知道了实现此功能的类和它的方法名,,就可以直接调用了,不用重复写代码!,什么是封装,public class Teacher2 ,private,String name; /,/,教员姓名,/,返回教员姓名,public String getName() ,return name,;,/,设定教员姓名,public void setName(String name) ,this.name = name,;,封装,就是隐藏实现细节,将属性私有化,提供公有方法访问私有属性,通过这些公有方法访问私有属性,Teacher2 teacher = new Teacher2();,teacher.,setName,(,李芳,);,String tName = teacher.,getName,();,通过,setter,、,getter,方法访问,name,属性,this,代表当前类的实例,29,如何实现封装,封装的实现:,1,、修改属性的可见性来限制对属性的访问,2,、为每个属性创建一对赋值,(setter),方法和取值,(getter),方法,用于对这些属性的访问,3,、在,setter,和,getter,方法中,加入对属性的存取限制,public class Teacher3 ,private String name; /,教员姓名,private int age; /,年龄,public int getAge() ,return age;,public void setAge(int age) ,if (age22) ,System.out.println(,错误!最小年龄应为,22,岁!,);,this.age = 22; /,如果不符合年龄要求,则赋予默认值, else ,this.age = age;,/,此处省略对,name,属性的,setter,、,getter,方法,1,2,3,30,如何实现封装,public class Teacher3Test ,public static void main(String args) ,AccpTeacher3 teacher = new AccpTeacher3();,teacher.setName (,李芳,);,teacher.setAge(10);,System.out.println(teacher.introduction();,使用封装,增加了数据访问限制,增强了程序的可维护性,错误!最小年龄应为,22,岁!,大家好!我是李芳,我今年,22,岁,测试类通过调用,setter,方法,为对象的各个属性赋值,31,什么是构造方法,构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值,构造方法必须满足以下语法规则:,1,、方法名与类名相同,2,、没有返回类型,public class Teacher5 ,private String name; /,教员姓名,/,构造方法,public Teacher5() ,name =,无名氏,;,Public Teacher5Test ,public static void main(String args) ,Teacher5 teacher = new Teacher5();,使用,new,关键字调用构造方法,32,带参数的构造方法,通过带参数的构造方法,显式地为实例变量赋予初始值,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;,33,带参数的构造方法,通过调用带参数的构造方法,简化对象初始化的代码,public class Teacher6Test ,public static void main(String args) ,Teacher6 teacher = new Teacher6(,李芳,23, ,本科, ,咨询师,);,System.out.println(teacher.introduction();,创建对象时,一并完成了对象成员的初始化工作,大家好!我是李芳,我今年,23,岁,学历本科,目前职位是咨询师,34,生活中的方法重载,类,方法,方法参数,方法实现,司机,轿车,巴士,火车,驾驶,启动、行驶、,等待乘客上车、启动、,行驶、到站停车、,正点发车、行驶、,到站停车、,如果用代码实现,我们需要三个方法,这些方法的方法名称相同,参数类型不同,35,方法重载必须满足的条件,重载方法必须满足以下条件:,方法名相同。,方法的参数类型、个数、顺序至少有一项不相同。,方法的返回类型可以不相同。,方法的修饰符可以不相同。,调用重载方法时,,Java,使用参数的类型和数量决定实际调用重载方法的哪个版本。,36,方法重载的代码示例 1,方法重载并不陌生,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,方法,方法重载,37,生活中的继承,生活中,继承的例子随处可见,动物,食草动物,食肉动物,谁是父类?,谁是子类?,能说出继承的特点吗?,继承需要符合的关系:,is-a,,父类更通用、子类更具体,38,生活中的继承,子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性,巴士是汽车吗?,卡车是汽车吗?,出租车是汽车吗?,最大载客数量,报站,引擎数量,外观颜色,刹车,加速,汽车,最大载重量,卸货,所属公司,最大载客数量,打发票,属性,行为,39,为什么要使用继承 ?,使用继承,可以有效实现代码复用,40,如何实现继承,在Java语言中,用extends关键字来表示一个类继承了另一个类,例如:,public class JavaTeacher2 extends Teacher ,/,其余代码省略,在父类中只定义一些通用的属性与方法,例如:,public class Teacher ,private String name; /,教员姓名,private String school; /,所在中心,public AccpTeacher(String myName, String mySchool) ,/,初始化属性值,public void giveLesson() /,授课方法的具体实现,public void introduction() /,自我介绍方法的具体实现,41,如何实现继承,子类自动继承父类的属性和方法,子类中可以定义特定的属性和方法,public class Teacher ,private String name; /,教员姓名,private String school;/,所在中心,public AccpTeacher (String,myName, String mySchool) ,/,初始化属性值,public void giveLesson() ,/,授课方法的具体实现,public void introduction() ,/,自我介绍方法的具体实现,public class JavaTeacher2 extends Teacher ,public AccpJavaTeacher2(String myName, String mySchool) ,super(myName, mySchool);,public void giveLesson(),System.out.println(启动Eclipse);,super.giveLesson();,由于,giveLesson(),方法与父类的实现有所不同,因此重写了该方法,方法重写:子类和父类的方法具有相同的名称、参数列表、返回类型,父类中的属性和方法可以被子类继承,42,public class JavaTeacher2 extends Teacher ,Public JavaTeacher2(String myName, String mySchool) ,super(myName, mySchool);,如何实现继承,子类的构造方法中,通过super关键字调用父类的构造方法,方法重写后,通过,super,关键字调用父类的方法,public class JavaTeacher2 extends Teacher ,public void giveLesson(),System.out.println(启动 Eclipse);,super.giveLesson();,通过调用父类的构造方法,完成对属性值的初始化,43,一切类的“祖先”Object,在Java 中,所有的Java类都直接或间接地继承了java.lang.Object类,public class MyObject ,/,public class MyObect extends Object ,/,在,Eclipse,中调用,MyObject,对象的成员,会自动弹出继承自,Object,的所有方法,44,什么是多态,简单来说,多态是具有表现多种形态的能力的特征,同一个实现接口,使用不同的实例而执行不同操作,彩色打印机,打印机,黑白打印机,打印效果:彩色,打印效果:黑白,打印,打印,45,public class Teacher ,public void giveLesson(),System.out.println(,知识点讲解,);,System.out.println(,总结提问,);,public class Test ,public static void main(String args) ,HQ3 hq = new HQ3();,hq.judge(new AccpDBTeacher();,3,如何实现多态,1、子类重写父类的方法,2、编写方法时,使用父类定义的方法,3、运行时,根据实际创建的对象类型动态决定使用哪个方法,public class DBTeacher,extends Teacher ,public void giveLesson(),System.out.println(启动 SqlServer);,super.giveLesson();,1,public class HQ3 ,public void judge(Teacher t),t.giveLesson();,2,46,什么是Java接口,一个Java接口是一些方法特征的集合,但没有方法的实现,public interface PCI public void start();,public void stop();,class SoundCard implements PCI ,public void start() System.out.println(Du du.); public void stop() System.out.println(Sound stop!); ,Java,接口中定义的方法在不同的地方被实现,可以具有完全不同的行为,这是,Java,接口,相当于主板上的,PCI,插槽的规范,class NetworkCard implements PCI ,public void start() System.out.println(Send.); public void stop() System.out.println(Network stop!); ,47,什么是Java接口,public class Assembler public static void main(String args) PCI nc = new NetworkCard(); PCI sc = new SoundCard(); nc.start();,sc.start();,可以使用,Java,接口标识类型,运行时,根据实际创建的对象类型调用相应的方法实现,Du du.,Send.,控制台输出,2,1,48,多态与接口的区别,相同点,:,都是为了实现程序的可扩展和可维护性,.,不同点,:,多态,:,指实现同一个接口,使用不同的实例而执行不同的操作,必须存在继承关系,.,接口,:,存在共同的方法特征,但对方法有各自不同的实现,不必存在继承关系,.,49,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);,对象的引用,51,什么是常量,常量是一种标识符,它的值在运行期间恒定不变,常量标识符在程序中只能被引用,而不能被重新赋值,常量,圆周率PI,圆周率PI代码表示方式,public,static final,double,PI,= 3.149323846;,用法,将ang角度转换成径度,public static double toRadians(double ang) ,return ang / 180.0 *,PI,;,52,Java中常量的定义规则,加入final 关键字代表常量, 加入static 关键字代表类变量,尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串,public class Student ,public static final int FEMALE = 1; /,代表女性,public static final int MALE = 2; /,代表男性,private int sex; /,性别,public void setSex(int sex) ,if(sex=FEMALE),System.out.println(,这是一名女学生,);,else if(sex = MALE),System.out.println(,这是一名男学生,);,this.sex = sex;,53,在Java接口中声明常量,在Java 接口中声明的变量在编译时会自动加上static final的修饰符,即声明为常量,,因而Java接口通常是存放常量的最佳地点,public interface SchoolType ,public static final String school1 = “,国立大学,;,public static final String school2 = “,民办大学,;,public interface SchoolType ,String school1 = “,国立大学,;,String school2= “,民办大学,;,等同于,54,OO思想总结,OO基本特征,定义,具体实现方式,优势,封装,隐藏实现细节,对外提供公共的访问接口,属性私有化、添加公有的setter、getter方法,增强代码的可维护性,继承,从一个已有的类派生出新的类,子类具有父类的一般特性,以及自身特殊的特性,继承需要符合的关系:is-a,1、实现抽象(抽出像的部分),2、增强代码的可复用性,多态,同一个实现接口,使用不同的实例而执行不同操作,通过Java接口/继承来定义统一的实现接口;通过方法重写为不同的实现类/子类定义不同的操作,增强代码的可扩展性、可维护性,54,55,访问修饰符,信息隐藏是 OOP,最重要的功能之一,也是使用访问修饰符的原因,信息隐藏的原因包括:,对任何实现细节所作的更改不会影响使用该类的代码,防止用户意外删除数据,此类易于使用,访问修饰符,访问修饰符,private,protected,public,默认,56,访问修饰符,该类或非该类均可访问,public,只有该类可以访问,private,相同数据包中的类可以访问,默认,该类及其子类的成员可以访问,同一个包中的类也可访问,protected,57,访问修饰符,访问修饰符可访问性,位置,private,默认,protected,public,同一个类,是,是,是,是,同一个包内的类,否,是,是,是,不同包内的子类,否,否,是,是,不同包并且不是子类,否,否,否,是,57,58,方法修饰符,方法修饰符,static,final,abstract,59,static 修饰符,static,修饰符修饰的方法叫静态方法,目的,使该方法独立于类的实例,使用类去访问,而不是类实例,所以也叫类方法,60,static 修饰符,调用静态方法的语法为:,classname.methodname( );,规 则,可以调用其他静态方法,必须访问静态数据,不能使用,super,或,this,关键字,61,final 修饰符,final,不能修改变量,子类不能重写方法,62,abstract 修饰符,由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类,抽象方法必须声明在抽象类中,抽象方法语法:,abstract type method_name(parameter_list);,声明抽象类语法:,abstract class ,使用:父类中的某些抽象不包含任何逻辑,并需要在子类中重写,子类提供这种抽象方法的实现细节,63,abstract 修饰符,抽象类可以具有指向子类对象的对象引用,abstract,抽象类不能被,实例化,构造方法 和,static,方法不能是抽象的,父类的抽象方法往往在子类中实现,64,JAVA小应用程序-Java Applet,它是嵌入在Web页上供浏览器运行的程序,也可放在服务器上供客户端下载使用,每个小应用程序继承java.applet.Applet,一、小应用程序建立到运行的4个步骤:,1、用Java语言编写小应用程序的源程序。,2、小应用程序翻译成字节码。,3、将小应用程序的字节码嵌入到Web页中,设计一个指定小应用程序的HTML文件,使用标记,4、在支持Java的浏览器上运行。,二、熟悉APPLET类的基本方法作用。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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