java课件-继承和多态.ppt

上传人:人*** 文档编号:570652761 上传时间:2024-08-05 格式:PPT 页数:27 大小:365KB
返回 下载 相关 举报
java课件-继承和多态.ppt_第1页
第1页 / 共27页
java课件-继承和多态.ppt_第2页
第2页 / 共27页
java课件-继承和多态.ppt_第3页
第3页 / 共27页
java课件-继承和多态.ppt_第4页
第4页 / 共27页
java课件-继承和多态.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《java课件-继承和多态.ppt》由会员分享,可在线阅读,更多相关《java课件-继承和多态.ppt(27页珍藏版)》请在金锄头文库上搜索。

1、类的继承v被继承的类称为父类或者超类或者基类v继承父类的类称为子类或者派生类v执行继承时,子类将获得父类的所有成员(包括private的成员),并具有自身特有的属性。 继承是面向对象编程技术继承是面向对象编程技术的一块基石,它允许创建的一块基石,它允许创建分等级层次的类。运用继分等级层次的类。运用继承,可以创建一个通用类承,可以创建一个通用类定义一系列一般特性。该定义一系列一般特性。该类可以被更具体的类继承类可以被更具体的类继承Emoloyee类:类:namesexWorker类:类:categorydressAllowanceOfficer类:类:empClassvehicle职员类,具职员

2、类,具有姓名和性有姓名和性别两个属性别两个属性工人类,继承了父工人类,继承了父类的姓名和性别属类的姓名和性别属性外还包含类别和性外还包含类别和是否有服装津贴属性是否有服装津贴属性主任类,还包含主任类,还包含级别和是否配备级别和是否配备交通工具属性交通工具属性extends关键字vextends关键字用于继承类。v声明一个继承父类的类的通常形式如下: class subclass-name extends superclass-name /类体 没有extends,默认父类为Object一个类只能有一个父类,即单继承子类继承父类的全部成员注意注意继承示例class Employee String

3、 name; /姓名 char sex; /性别 Employee(String n, char s) name = n; sex = s; public String getName() return name; public char getSex() return sex;classWorkerextendsEmployeecharcategory;/类别类别booleandressAllowance;/是否提供服装津贴是否提供服装津贴Worker(Stringn,chars,charc,booleand)super(n,s);category=c;dressAllowance=d;pu

4、blicchargetCategory()returncategory;publicbooleangetAll()returndressAllowance;classInheDemopublicstaticvoidmain(Stringargs)Workerw=newWorker(M.John,M,B,true); System.out.println(工人工人信息信息);System.out.println(姓名姓名:+w.getName();System.out.println(性别性别:+w.getSex(); System.out.println(类别类别:+w.getCategory

5、();if(w.getAll()System.out.println(提供提供服装津贴服装津贴);elseSystem.out.println(“未提供未提供服装津贴服装津贴”);继承分析v在子类中不能直接访问父类中的私有成员v子类和父类之间应该有“IS-A”关系v不要滥用继承,只有在分类学上有意义时,才应该使用继承v子类具有扩展超类的责任v继承的目的就是为了代码复用里式代换原则v定义:无论何时,只要程序需要一个超类对象,那么就可以用一个子类对象来替代它。vEmployee e;ve=new Employee();/需要超类Employee对象ve=new Manager();/用子类对象替换

6、掉超类对象 注意:反过来是不行的v多态和动态绑定声明类型:对象变量被声明时的类型实际类型:对象变量实际指向的对象类型一个对象变量可以指向多种实际类型的现象称为“多态”在运行时自动选择正确的方法进行调用的现象称为“动态绑定”Java根据对象的实际类型来进行方法调用方法重载(overloading)v方法重载是Java实现面向对象的多态性机制的一种方式。v同一个类中多个方法有相同的名字,不同的参数列表,这种情况称为方法重载。v当重载方法被调用时,Java编译器根据参数的类型和数量来确定实际调用哪个重载方法的版本。v方法重载不考虑方法的返回类型。重载构造函数v一个类可以有多个构造函数v如果一个类没有

7、定义一个构造函数,Java 编译器将为这个类自动提供缺省构造函数(即无参的构造函数)v缺省构造函数将成员变量的值初始化为缺省值v一旦创建了自己的构造函数, Java 编译器将不再自动提供无参的构造函数。v重载构造函数提供了一组创建对象的方式,可以根据需要决定是否带初始参数。 publicclassconstructOverloadintx;constructOverload()x=0; System.out.println(不不带带参数的构造函数参数的构造函数);constructOverload(intx)this.x=x;System.out.println(带带一个参数的构造函数一个参数

8、的构造函数);方法覆盖(override)v方法覆盖是Java实现多态性机制的另一种方式。v在类层次结构中,如果子类中的一个方法与父类中的方法有相同的返回类型、相同的方法名并具有相同数量和类型的参数列表,这种情况称为方法覆盖。v当一个覆盖方法通过父类引用被调用,Java根据当前被引用对象的实际类型来决定执行哪个版本的方法。 v可以通过super关键字调用直属父类中被覆盖的方法版本。方法覆盖示例class SuperClass int a; SuperClass() a = 10; public void printA()System.out.println(父类中a =+a);class Su

9、bClass extends SuperClass int a; SubClass(int a) this.a = a; public void printA() System.out.println(子类中a = +a); publicclassOverrideDemopublicstaticvoidmain(Stringargs)SuperClasss1=newSubClass(10);s1.printA();将调用子类的将调用子类的printA方法方法包(package)v在Java中,包主要有以下用途 :将类进行分类组织存放 避免命名冲突 包允许在更广的范围内保护类、数据和方法 v包可

10、以是类、接口和子包的集合v包中的文件被编译成.class文件后被放在与完整包名匹配的子目录中。实际是:基目录包名v嵌套的包之间没有任何关系例如:包java.util和 java.util.jar就是彼此无关的使用包v创建包package mypackage; 在一个Java源文件中,只能使用一个package语句, 并且通常位于Java源文件的第一行 v访问 Java 包成员mypackage.My_Classv导入包vimport package_name.*; 在一个Java源文件中,可以使用多个import语句v导入子包import package_name.cpackage.*;类的静

11、态成员-staticv类中的静态变量、方法或代码块属于类,而不属于某个特定的对象。 v类的静态成员可以与类的名称一起使用,而无需创建类的对象。 v静态变量或方法也称为类变量或类方法。用用static修饰符修饰,可修饰符修饰,可以是变量、方法或代码以是变量、方法或代码块块静态变量v不管创建了类的多少实例,整个类中静态变量的副本只有一个。 v引用静态变量的方法:-通过引用类的任一实例通过引用类的任一实例-通过类的名称通过类的名称classStaticDemostaticintx=0;StaticDemo()x+;StaticDemod1=newStaticDemo();StaticDemod2=n

12、ewStaticDemo();d1.x=100;d2.x=200;testVariable=d1.x; 通过类实例访问通过类实例访问不是一个好方法不是一个好方法StaticDemod1=newStaticDemo();StaticDemod2=newStaticDemo();StaticDemo.x=100;StaticDemo.x=200;testVariable=StaticDemo.x; 声明为声明为static的变量的变量实质上就是全局变量实质上就是全局变量通过类名访问通过类名访问静态方法v与静态方法相关的几个要点:类的静态方法只能访问其他的静态成员类的静态方法只能访问其他的静态成员静

13、态方法没有静态方法没有this静态方法不能被覆盖为非静态方法静态方法不能被覆盖为非静态方法classStaticFunstaticinti=10;intj;staticvoidsetValue(intx)j=x;/出出错错System.out.println(+i);不能访问非静态变量不能访问非静态变量j,可以访问静态变量可以访问静态变量iclassStaticTeststaticvoidtest()classStaticexextendsStaticTestvoidtest()/出出错错 Java类属性和对象属性的初始化顺序1.首先找到类中的所有静态声明语句(不管位置在哪),把他们初始化为缺

14、省值2.然后再按照书写顺序依次处理每一个static的东西3.把对象属性初始化为缺省值4.按照书写顺序依次处理每一个对象属性的初始化语句5.最后执行构造函数 final 关键字/final类vfinal 修饰符可应用于类、方法和变量。vfinal在应用于类、方法和变量时意义是不同的,但本质是一样的:final表示不可改变。 v声明为final的类不能被继承。vfinal 类示例: java.lang.String finalclassTestFinalinti=7;intj=1;voidf()class Further extends TestFinalfinal类不能被继承类不能被继承fin

15、al 方法v在方法声明中使用 final 关键字向编译器表明子类不能覆盖(override)此方法。v在声明类中,一个 final 方法只被实现一次。v如果一个类为 final 类,那么它的所有方法都为隐式的 final 方法。classTestFinalfinalvoidf()classFurtherextendsTestFinalfinalvoidf()final方法不能方法不能被覆盖被覆盖final 变量v一个变量可以声明为final,这样做的目的是阻止它的内容被修改。v声明final变量后,只能被初始化一次,然后就不能对其值进行修改。v一个final变量实质上是一个常量。 classF

16、inalDemopublicstaticvoidmain(Stringargs)finalintnoChange=20;noChange=30; final变量不能被变量不能被修改修改抽象类 1-1v定义:一种类型,只提供部分方法的具体实现。v语法:abstract class 类名.v一般情况下,抽象类既包含具体方法,又包含抽 象方法。 v具体方法:既有方法的声明,又有方法的实现(即有方法体)。v抽象方法:只有方法的声明,而没有方法的实现(即没有方法体)。语法: abstract 返回类型 方法名(参数列表)抽象类不能被实例化,只能被继承。abstract 修饰符修饰符可与类和方法一可与类和

17、方法一起使用起使用抽象类 1-2v抽象类就是用来继承的v子类必须为抽象类中的所有抽象方法提供具体实现,否则,子类也将是一个抽象类v抽象类中可以声明实例变量,这些实例变量就是为了提供给子类继承的v抽象类可以有一个或多个构造函数,它是提供给子类进行调用的v特别地,抽象类中的所有方法都可以是具体方法抽象类示例abstract class Employee int basic = 2000; abstract void salary();/抽象方法class Manager extends Employee void salary() System.out.println(薪资等于 +basic*5)

18、; class Worker extends Employee void salary() System.out.println(薪 资 等 于 +basic*2); 抽象方法没有抽象方法没有方法主体方法主体在子类中提供在子类中提供实现实现在子类中提供在子类中提供实现实现Java接口 2-1v定义:一种类型,不包含任何具体方法。换言之,所有方法都是抽象方法v语法:public interface 接口名v接口不能被实例化v接口中的抽象方法不需要abstract修饰v一个类可以继承接口,而且可以同时继承多个接口。一个类继承一个接口被称作“接口继承”;通过一个类同时继承多个接口可以在Java中实现

19、“多重继承”Java接口 2-2v接口中的方法被默认为是public的,所以在实现一个接口的时候,来自接口中的方法必须定义成publicv接口中可包含基本数据类型的数据成员,但它们都默认为是public static final的,因此,这些数据成员是静态常量。v一个接口也可以继承一个或多个接口,语法为:interface 接口名 extends 接口1, ,接口n 创建接口的步骤2-1/ 有方法的接口public interface myinterface public void add(int x, int y);public void volume(int x,int y, int z)

20、;/ 定义程序使用的常量的接口public interface myconstants public static final double price = 1450.00; public static final int counter = 5;n 定义一个接口:定义一个接口:创建接口的步骤2-2v用关键字 implements 实现接口,例如:classdemoimplementsmyinterfacev如果有一个以上接口被实现,则用逗号隔开接口名称,如下所示: class demo implements Mycalc, Mycount接口使用示例interface A double g=9.8; void show( );class InterfaceTest public static void main(String args ) B b=new B( ); b.show( ); classBimplementsApublicvoidshow()System.out.println(“g=“+g);接口的意义v将对象的行为和对象行为的实现分割开来,使可插入性变得可能。v接口就是需要由其他类实现的行为模板。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号