面向对象高级特征

上传人:lx****y 文档编号:243447561 上传时间:2024-09-23 格式:PPT 页数:46 大小:1.92MB
返回 下载 相关 举报
面向对象高级特征_第1页
第1页 / 共46页
面向对象高级特征_第2页
第2页 / 共46页
面向对象高级特征_第3页
第3页 / 共46页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,知识回顾,面象对象技术,类和对象,类的定义及使用,类可用,class,来定义,类的变量和方法可被该类的实例访问,圆点符号用于访问对象的成员,构造方法在创建对象时初始化对象,包,使用,package,声明包,使用,import,导入包,类是具有相同属性和行为的一组对象的集合,对象是类的实例,隐藏对象实现细节的过程,使用户不能看到实现细节,1,3,类和对象的高级特征,第,课,2,本章目标,理解继承及其特点,运用,Java,程序实现继承,理解多态及其特点,运用,Java,程序实现多态,掌握访问修饰符及方法修饰符,3,继承,继承是一种,机制,,让,一个类,能够,继承,另,一个类,的所有,行为,和,属性,。,通过继承,一个类可以拥有已有类的所有功能。,通过继承,所有类都以严格的层次结构来组织。,4,继承,5,子类,继承其他类的类叫,子类,,被继承的类叫做,超类,(父类)。,继承的特点,层次结构,子类继承,父类的属性和方法,6,使用,Java,实现继承,实现步骤:,步骤:编写父类,class,Robot,protected,String,name =,Anna,;,Robot() ,void showDetail(),System,.out.println(,名称,-,+,name);,步骤:编写子类,使用关键字,extends,继承父类,class,WalkingRobot,extends,Robot,WalkingRobotTest() ,void show(),System,.out.println(,从子类,WalkingRobot,中输出的信息,);,System,.out.println(,机器人的名称,-,+,name);,父类名称,子类名称,7,演示,使用,Java,实现继承,继承演示,8,子类的构造方法,子类构造方法的名称与类的名称相同,在子类中调用父类构造方法,使用关键字,super,调用父类构造方法的语法为:,super();,或,super(,参数列表,) ;,用,super,语句来调用父类的构造方法时,必须遵守以下语法规则:,子类的构造方法中,通过,super,语句调用父类构造方法。,子类的构造方法中若有,super,语句,必须做为构造方法的第一条语句。,9,子类的构造方法,class,Robot,protected,String,name;,protected,String,color;,Robot(,String,name,String,color),this.,name = name;,this.,color,=,color;,void showDetail(),System.,out.println(,从父类,Robot,中输出的信息,);,System.,out.println(,名称,-,+,name);,System.,out.println(,颜色,-,+,color );,父类的构造方法,class,WalkingRobot,extends,Robot,WalkingRobot(,String,name,String,color),super(name,color);,void show(),System,.out.println(,从子类,WalkingRobot,中输出的信息,);,System,.out.println(,机器人的名称,-,+,name);,System,.out.println(,机器人的颜色,-,+,color);,System,.out.println(=);,子类的构造方法,调用父类构造方法,public class,WalkingRobotTest,WalkingRobotTest(),public static void,main(,String, args),WalkingRobot wr =,new,WalkingRobot();,wr.show();,wr.showDetail();,调用子类创建的方法,调用继承自父类的方法,10,演示,使用,Java,创建子类构造方法,子类构造方法演示,11,多态,多态是一种普遍存在的现象,如,water,的三种形态:冰,水,汽等。也就是指“多种形式” 。,多态使用不同的实例而执行不同操作。,多态实现的方法包括方法重写和方法重载。,软件系统支持多态的前提就是能够静态(编译时)或者动态(运行时)地确定类型。,12,多态,/*,机器人类,Robot,的子类*,/,class,WalkingRobot,extends,Robot,int,legnumber;,/,腿的数量,WalkingRobot(,String,name,String,color,int,legnumber),super,(name,color);,this,.legnumber = legnumber;,void,show(),System,.out.println(,从子类,WalkingRobot,中输出的信息,);,System,.out.println(,机器人的名称,-,+,name);,System,.out.println(,机器人的颜色,-,+,color);,System,.out.println(,机器人的腿数量,-,+,legnumber);,System,.out.println(,=,);,/*,机器人类,Robot,的子类*,/,class,DrivingRobot,extends,Robot,int,drivenumber;,/,驱动的数量,DrivingRobot(,String,name,String,color,int,drivenumber),super,(name,color);,this.,drivenumber = drivenumber;,void,show(),System,.out.println(,从子类,DrivingRobot,中输出的信息,);,System,.out.println(,机器人的名称,-,+,name);,System,.out.println(,机器人的颜色,-,+,color);,System,.out.println(,机器人的驱动数量,-,+,drivenumber);,System,.out.println(,=,);,子类,DrivingRobot,的,show,方法,子类,WalkingRobot,的,show,方法,public,class,MoreState,MoreState(),public static void,main(,String, args),Robot r =,new,Robot(,Blue,Black,);,WalkingRobot wr =,new,WalkingRobot(,Lisa,blue,4,);,DrivingRobot rr =,new,DrivingRobot(,Anna,pink,1,);,r = wr;,r.show();,r = rr;,r.show();,父类对象,r,指向子类对象,wr,r.show,调用的为,wr,的,show,方法,父类对象,r,指向子类对象,rr,r.show,调用的为,rr,的,show,方法,13,演示,使用,Java,实现多态,多态演示,14,方法重载,对于类的方法(包括从父类中继承的方法),如果有两个方法的方法名相同,但参数不一致,那么可以说,一个方法是另一个方法的,重载,。,class,Robot,protected,String,name =,Anna,;,protected,String,color =,Pink,;,Robot(),Robot(,String,name,String,color),this,.name = name;,this,.color=color;,15,方法重写,在,Java,中,子类可继承父类中的方法,而不需要重新编写相同的方法。,有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。,子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。,super.methodname,(),用于调用父类中的方法,16,方法重写,class,Robot, ,void,show(),System,.out.println(,从父类,Robot,中输出的信息,);,System,.out.println(,名称,-,+,name);,System,.out.println(,颜色,-,+,color );,class,WalkingRobot,extends,Robot, ,void,show(),System,.out.println(,从子类,WalkingRobot,中输出的信息,);,System,.out.println(,机器人的腿数量,-,+,legnumber);,重,写,17,演示,使用,Java,实现方法重写,方法重写演示,18,访问修饰符,访问修饰符,使用访问修饰符,起到信息隐藏的作用,信息隐藏的原因,对任何实现细节所作的更改,不会影响使用该类的代码,防止用户意外删除数据,使类易于使用,访问修饰符的分类,控制对类、方法和,变量的访问的限定符,private,protected,public,默认修饰符,限定符,static,,,创建类方法和类变量,限定符,final,,,用于固定类、方法和变量的实现,限定符,abstract,,,用于创建抽象类和方法,19,private,修饰符,类中限定为,private,的成员,只能被这个类本身访问。,如果一个类的构造方法声明为,private,则其它类不能生成该类的一个实例。,class,Robot,private,String,name =,Anna,;,private,String,color =,Pink,;,private,Robot(,String,name,String,color),this,.name = name;,this,.color = color;,void,show(),System,.out.println(,从父类,Robot,中输出的信息,);,System,.out.println(,名称,-,+,name);,System,.out.println(,颜色,-,+,color );,System,.out.println(,=,);,本类中成员可以使用其私有成员,类中的私有成员,public class,DemoPrivate,DemoPrivate(),public static void,main(,String, args),Robot wr =,new,Robot(,Lisa,blue,);,wr.show();,不正确:,类,Robot,的,构造方法为私有成员,20,protected,修饰符,class,Robot,protected,String,name =,Anna,;,class,WalkingRobot,extends,Robot,void,show(),System,.out.println(,机器人的名称,-,+,name);,class,DemoProtected,public static void,main(String args),Robot r =,new,Robot();,System,.out.println(,机器人的名称,-,+,r.name);,protected,成员能够被本类访问,protected,成员能够被子类访问,(,同一包或不同包,),protected,成员能够被,同一个包的类访问,21,默认修饰符,package,com.test;,public,class,Robot,String,name = ,Anna,;,String,color = ,Pink,;,public,Robot(,String,name,String,color),this,.name = name;,this,.color = color;,void,show() ,System,.out.println(,从父类,Robot,中输出的信息,);,System,.out.println(,名称,-, + name);,System,.out.println(,颜色,-, + color );,System,.out.println(,=,);,默认成员能够被本类访问,默认成员能够被,同一包中的类访问,import,com.test.Robot;,class,WalkingRobot,extends,Robot ,int,legnumber;,WalkingRobot(,String,name,String,color,int,legnumber) ,super,(name,color);,this,.legnumber = legnumber;,void,show() ,System,.out.println(,从子类,WalkingRobot,中输出的信息,);,System,.out.println(,机器人的名称,-,+,name);,不正确,:默认成员,不能被,不同包中的类访问,22,public,修饰符,package,com.test;,public class,AccessDemo,public void,mechod1(),System,.out.println(,一个公有的方法!任何类都可以访问。,);,protected void,mechod2(),System,.out.println(,一个受到保护的方法!只有子类可以访问。,);,private void,mechod3(),System,.out.println(,一个私有的方法!只有类本身才可以访问。,);,package,net.test;,import,com.test.*;,public class,OutAccessRun,public static void,main(,String, args),AccessDemo d =,new,AccessDemo();,d.method1();,d.method2();,d.method3();,正确,:公有方法,任何类可访问,不正确,:保护方法,只能在子类中被访问,不正确,:私有方法,只有本类能访问,23,访问修饰符,位置,private,默认,protected,public,同一个类,是,是,是,是,同一个包内的类,否,是,是,是,不同包内的子类,否,否,是,是,不同包且不是子类,否,否,否,是,24,演示,在,Java,中使用访问修饰符,访问修饰符演示,25,静态变量,static,修饰符修饰的变量叫静态变量,静态变量独立于类的实例,使用类去访问,而不是类实例,所以也叫类变量,静态变量的声明格式:,static type,classVar,;,类变量仅在生成第一个对象时分配内存,所有实例对象共享同一个类变量,类变量可通过类名直接访问,26,静态变量,class,Robot,static long,count =,0,;,String,name = ,Anna,;,String,color = ,Pink,;,public,Robot(),count+;,public,Robot(,String,name,String,color),this,.name = name;,this,.color = color;,count+;, ,public class,DemoStatic,public static void,main(,String, args),Robot r1 =,new,Robot(,第,1,个机器人,color1,);,Robot r2 =,new,Robot(,第,2,个机器人,color2,);,System,.out.println(,当前机器人的个数为:, + Robot.count);,创建两个对象,count,值为,2,静态成员变量,27,静态方法,static,修饰符修饰的方法叫静态方法,静态方法独立于类的实例,使用类去访问,而不是类实例,所以也叫类方法,静态方法的声明格式:,static,returnType,classMethod(paramlist,), ,静态方法使用规则:可以调用其他静态方法,;,必须访问静态数据,;,不能使用,super,或,this,关键字,28,静态方法,class,Robot,static long,count =,0,;,String,name = ,Anna,;,String,color = ,Pink,;,public,Robot() ,count+;,public,Robot(,String,name,String,color) ,this,.name = name;,this,.color = color;,count+;,public static void,displayCount() ,System,.out.println(,当前机器人的个数为:,+,count);, ,静态方法,用于输出静态变量,public class,DemoStatic,public static void,main(,String, args),Robot r1 =,new,Robot(,第,1,个机器人,color1,);,Robot r2 =,new,Robot(,第,2,个机器人,color2,);,Robot.displayCount();,创建两个对象,调用静态方法输出,count,值为,2,29,演示,在,Java,中使用,static,修饰符,static,修饰符演示,30,final,修饰符,限定符,final,用于类、方法和变量,指出它们将不能被修改。,对于类、方法和变量,,final,的含义分别为:,final,类,不能被继承,;,final,方法,不能被子类覆盖,;,final,变量,的值不能被修改,final,修饰变量,则成为常量,例如:,final int,variableName =,12,;,31,final,修饰符,class,Robot,protected,String,name = ,Anna,;,protected,String,color = ,Pink,;,Robot(,String,name,String,color),this.,name = name;,this.,color = color;,final void,show(),System,.out.println(,从父类,Robot,中输出的信息,);,System,.out.println(,名称,-,+,name);,System,.out.println(,颜色,-,+,color );,System,.out.println(,=,);,final,修饰的方法,不能在子类中被重写,32,演示,在,Java,中使用,final,修饰符,final,修饰符演示,33,abstract,修饰符,由,abstract,修饰的方法叫抽象方法;由,abstract,修饰的类叫抽象类,抽象方法必须声明在抽象类中,抽象方法语法:,abstract type,method_name(parameter_list,);,声明抽象类语法:,abstract class ,父类中的某些抽象不包含任何逻辑,并需要在子类中重写,子类提供这种抽象方法的实现细节,34,abstract,修饰符,抽象类不能被实例化,构造方法和静态方法不能是抽象的,父类的抽象方法往往在子类中实现,abstract,class,Robot,protected,String,name = ,Anna,;,protected,String,color = ,Pink,;,Robot(,String,name,String,color),this.,name = name;,this.,color = color;,abstract void,show();,抽象类,抽象方法,class,WalkingRobot,extends,Robot ,WalkingRobot(,String,name,String,color) ,super,(name,color);,void,show() ,System.,out.println(“,从子类,WalkingRobot,中输出的信息,);,System,.out.println(“,机器人的名称,-,+,name);,System,.out.println(“,机器人的颜色,-,+,color);,System.,out.println(,=,);,实现抽象父类中的抽象方法,class,DrivingRobot,extends,Robot,int,drivenumber;,DrivingRobot(,String,name,String,color,int,drivenumber) ,super,(name,color);,this,.drivenumber = drivenumber;,void,show() ,System,.out.println(,从子类,DrivingRobot,中输出的信息,);, ,System,.out.println(,机器人的驱动数量,-, + drivenumber);,实现抽象父类中的抽象方法,public class,DemoAbstract,public static void,main(,String, args) ,Robot r ;,WalkingRobot wr =,new,WalkingRobot(,Lisa,blue,4,);,DrivingRobot rr =,new,DrivingRobot(,Anna,pink,1,);,r = wr;,r.show();,r = rr;,r.show();,35,演示,在,Java,中使用,abstract,修饰符,abstract,修饰符演示,36,接口,接口就是某个事物对外提供的一些功能的声明,可以利用接口实现多态,同时接口也弥补了,Java,单一继承的弱点,使用,interface,关键字定义接口,一般使用接口声明方法或常量,接口中的方法只能是声明,不能是具体的实现,37,接口的创建方法,/,定义方法的接口,public interface,myinterface,public void,add(,int,x,int,y);,public void,volume(,int,x,int,y,int,z);,/,定义程序使用的常量的接口,public interface,myconstants,public static final double,price =,1450.00;,public static final int,counter =,5,;,接口中的方法必须为,public,修饰的,接口中只能定义,public,类型的静态常量,38,接口的实现,class,UserInterface,implements,MyInterface,public void,add(,int,x,int,y),System.out.println(,x + y =,+,(x+ y);,public void,volume(,int,x,int,y,int,z),System.out.println(,x * y * z =,+,x*y*z);,void,display(,int,x,int,y,int,z),add(x,y);,volume(x,y,z);,实现接口,MyInterface,实现接口中的方法,39,演示,在,Java,中使用接口,接口演示,40,多继承,发动机,电驱动发动机,光驱动发动机,光电驱动发动机,41,多继承,/*,查询发动机的马力,发动机将返回一个表示马力的整数,*,/,public interface,Motor,public int,getHorsepower();,/*,查询电驱动发动机的充电时间,发动机将返回一个表示充电时间的整数。*,/,public interface,BatteryPoweredMotor,extends,Motor,public int,getTimeToRecharge();,/*,查询光驱动发动机能够正常运转所需要的最小流明数,发动机返回一个整数。*,/,public interface,SolarPoweredMotor,extends,Motor,abstract public int,getLumensToOperate();,/,光电驱动的发动机可以描述为,public class,DualPoweredMotor,implements,SolarPoweredMotor, BatteryPoweredMotor, ,42,演示,多继承,多继承演示,43,总结,类和对象的,高级特征,封装、继承和多态是面向对象的主要特征,继承可提高代码的重用性,,使用,extends,关键字来实现,继承其他类的类叫子类,被继承的类叫做超类(父类),子类构造方法,super,调用父类构造方法,多态性是不同的实例对象以不同的,方式对相同的信息作出不同的表现,方法重载,方法重写,运行时多态和编译时多态,访问修饰符的分类,控制对类、方法和,变量的访问的限定符,限定符,static,,,创建类方法和类变量,限定符,final,,,用于固定类、方法和变量的实现,限定符,abstract,,,用于创建抽象类和方法,private,protected,public,默认修饰符,接口就是某个事物对外提供的一些功能的声明,弥补,Java,单一继承的,不足,实现多继承,44,习题,45,作业,46,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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