第6章重载与多态

上传人:沈*** 文档编号:246759208 上传时间:2024-10-15 格式:PPT 页数:30 大小:156KB
返回 下载 相关 举报
第6章重载与多态_第1页
第1页 / 共30页
第6章重载与多态_第2页
第2页 / 共30页
第6章重载与多态_第3页
第3页 / 共30页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Java,语言程序设计,辽宁科技学院信息工程系,第6,章,重载与多态,6.1,类成员的覆盖,6.2,方法重载,6.3,抽象类和最终类,6.4,接口,本章要,点,掌握在,Java,中覆盖的实现方式,掌握在,Java,中重载的实现方式,掌握抽象类的概念,理解接口的概念,掌握它在,Java,中的实现,6.1,类成员的覆盖,6.1.1,覆盖的用法,子类对继承自父类的类成员重新进行定义,就称为覆盖,它是一种很重要的多态形式。要进行覆盖,就是在子类中对需要覆盖的类成员以父类中相同的格式,再重新声明定义一次,这样就可以对继承下来的类成员进行功能的重新实现,从而达到程序设计的要求。,public class,MethodOverride,public static void main(String,args,),SubClass,s=new,SubClass,();,s.fun();,class,SuperClass,int,i=1;,public void fun(),System.out.println(Super,);,System.out.println,(,父类的,i=+i);,class,SubClass,extends,SuperClass,int,i=2;,public void fun(),System.out.println(Sub,);,System.out.println,(,子类的,i=+i);,super.fun();,例,6.1,覆盖的用法,例,6.1,程序运行结果如图所示,6.1.2,使用被覆盖的成员,1,域变量的隐藏,子类重新定义一个与从父类那里继承来的属性变量完全相同的变量,称为域变量的隐藏。对于域变量的隐藏来说,父类定义的域变量在子类对象实例化时仍然分配一个存储空间。,当子类执行继承自父类的操作时,处理的是继承自父类的变量,而当子类执行它自己定义的方法时,所操作的就是它自己定义的变量,而把继承自父类的变量“隐藏”起来。,public class,ExtendsExam,public static void main(String,args,),subclass e=new subclass();,System.out.println,(,Sup_getX,(),方法结果:,+,e.,Sup_getX,();,System.out.println,(,Sub_getX,(),方法结果:,+,e.Sub_getX,();,class,superclass,public,int,x=10;,int,Sup_getX,(),return(x);,class subclass extends,superclass,private,int,x=20;,int,Sub_getX,(),return(x);,例,6.2,域变量的隐藏,例,6.2,程序运行结果如图所示,2,方法的覆盖,子类重新定义与父类同名的方法,实现时父类方法的覆盖(,Overload)。,方法的覆盖与域的隐藏的不同之处在于:子类隐藏父类的域只是使之不可见,父类的同名域在子类对象中仍然占有自己的独立内存空间;而子类方法对父类同名方法的覆盖将清除父类方法占用的内存空间,从而使父类方法在子类对象中不复存在。,方法的覆盖中需要注意的问题是:子类在重新定义父类已有的方法时,应保持与父类完全相同的方法头声明,即应与父类有完全相同的方法名、返回值和参数列表。否则就不是方法的覆盖,而是子类定义自己的与父类无关的方法,父类的方法未被覆盖,所以仍然存在。,class,superClass,void,superPrint,(),System.out.println(This,is,superClass,!);,class,subClass,extends,superClass,void,superPrint,(),System.out.println(This,is,subClass,!);,public class,myInherit,public static void main(String,args,),subClass,subObject,=new,subClass,();,subObject.superPrint,();/,子类对象调用子类的方法,superClass,superObject,=new,superClass,();,superObject.superPrint,();/,父类对象调用父类的方法,例,6.3,方法的覆盖,例,6.4,程序运行结果如图所示,3,super,参考,相对,this,来说,,super,表示的是当前类的直接父类对象,是当前对象的直接父类对象的引用。所谓直接父类是相对于当前类的其他“祖先”类而言的。,public class,ExtendsExam,public static void main(String,args,),subclass e=new subclass();,e.Sub_printX,();,class,superclass,public,int,x=10;,int,Sup_getX,(),return(x);,void,Sup_printX,(),System.out.println(“Sup_printX,(),方法结果:”,+,Sup_getX,();,class subclass extends,superclass,private,int,x=20;,int,Sub_getX,(),return(super.x);/,修改部分,void,Sub_printX,(),System.out.println,(,Sub_getX,(),方法结果:,+,Sup_getX,();,super.,Sup_printX,();,例,6.5,super,参考,例,6.5,程序运行结果如图所示,6.2,方法重载,6.2.1,方法的重载,在,Java,中,同一个类中的两个或两个以上的方法可以有同一个名字,只要它们的参数声明不同即可。在这种情况下,该方法就被称为重载(,overloaded),,这个过程称为方法重载(,method overloading)。,方法重载是,Java,实现多态性的一种方式。,有两个规则适用于重载方法:,调用语句的参数表必须有足够的不同,以至于允许区分出正确的方法被调用。,方法的返回类型可以各不相同,但它不足以使返回类型变成唯一的差异。重载方法的参数表必须不同。,public class,OverloadExam,public static void print(String,str,),System.out.println(String,=+,str,);,public static void,print(int,i),System.out.println(int,=+i);,public static void main(String,args,),print(123);,print(123);,例,6.6,方法重载,例,6.7,程序运行结果如图所示,6.2.2,构造函数的重载,例68,构造函数的重载,public class Employee,private String name;,private,int,salary;,public Employee(String n,int,s),name=n;,salary=s;,public Employee(String n),this(n,0);,public Employee(),this(Unknown );,6.3,抽象类和最终类,6.3.1,抽象类,在,Java,中,凡是用,abstract,修饰符修饰的类称为抽象类。,定义一个抽象类的格式如下:,abstract class,ClassName,./,类的主体部分,抽象类和一般的类不同之处在于:,如果一个类中含有未实现的抽象方法,那么这个类就必须通过关键字,abstract,进行标记声明为抽象类。,抽象类中可以包含抽象方法,但不是一定要包含抽象方法。它也可以包含非抽象方法和域变量,就像一般类一样。,抽象类是没有具体对象的概念类,也就是说抽象类不能实例化为对象。,抽象类必须被继承。子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类。,abstract class,fatherClass,abstract void,abstractMethod,();,void,printMethod,(),System.out.println(fatherClass,function!);,class,childClass,extends,fatherClass,void,abstractMethod,(),System.out.println(childClass,function!);,public class,mainClass,public static void main(String,args,),childClass,obj,=new,childClass,();,obj,.,printMethod,();,obj,abstractMethod,();,例,6.9,抽象类,例,6.9,程序运行结果如图所示,6.3.2,最终类,如果一个类被,final,修饰符所修饰和限定,说明这个类不可能有子类,这样的类就称为最终类。最终类不能被别的类继承,它的方法也不能被覆盖。被定义为,final,的类通常是一些有固定作用、用来完成某种标准功能的类。如,Java,系统定义好的用来实现网络功能,的,InetAddress,、Socket,等类都是,final,类。,6.4,接口,6,.4.1,接口的定义,Java,中声明接口的语法如下:,public interface,接口名,extends,父接口名列表,/,接口体,/,常量域声明,public static final,域类型 域名常量值,;,/,抽象方法声明,public abstract native,返回值 方法名,(,参数列表,),throw,异常列表,;,在,Java,中接口是一种专门的类型。用,interface,关键字定义接口。,接口中只能定义抽象方法,不能有方法体,一定是,public,修饰的。,接口中可以定义变量,但实际上是,static final,修饰的常量。,接口中不能定义静态方法。,定义接口可归纳为如下几点:,public interface,Sup_InterfaceExam,public static final,int,x;,int,y;,public void z();,public abstract,int,getz,();,public interface,Sub_InterfaceExam,extends,Sup_InterfaceExam,public static final,int,a;,int,b;,public void c();,public abstract,int,getc,();,class,MyClass,implements,Sub_InterfaceExam,Sup_InterfaceExam,public void z(),public,int,getz,(),return 1;,public void c(),public,int,getc,(),return 5;,例,6.10,定义接口,接口不能包含任何可以执行的方法,而抽象类可以。,类可以实现多个接口,但只有一个父类。,接口不是类分级结构的一部分,而没有联系的类可以执行相同的接口。,接口与抽象类的区别:,6.4.2,接口的实现,一个类要实现接口时,请注意以下问题:,在类的声明部分,用,implements,关键字声明该类将要实现哪些接口。,如果实现某接口的类不是,abstract,抽象类,则在类的定义部分必须实现
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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