java课件-继承和多态.ppt

上传人:本田雅阁 文档编号:2038439 上传时间:2019-02-07 格式:PPT 页数:27 大小:365.01KB
返回 下载 相关 举报
java课件-继承和多态.ppt_第1页
第1页 / 共27页
java课件-继承和多态.ppt_第2页
第2页 / 共27页
java课件-继承和多态.ppt_第3页
第3页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

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

1、类的继承,被继承的类称为父类或者超类或者基类 继承父类的类称为子类或者派生类 执行继承时,子类将获得父类的所有成员(包括private的成员),并具有自身特有的属性。,继承是面向对象编程技术的一块基石,它允许创建分等级层次的类。运用继承,可以创建一个通用类定义一系列一般特性。该类可以被更具体的类继承,职员类,具 有姓名和性 别两个属性,工人类,继承了父 类的姓名和性别属 性外还包含类别和 是否有服装津贴属性,主任类,还包含 级别和是否配备 交通工具属性,extends关键字,extends关键字用于继承类。 声明一个继承父类的类的通常形式如下: class subclass-name exte

2、nds superclass-name /类体 没有extends,默认父类为Object 一个类只能有一个父类,即单继承 子类继承父类的全部成员,注意,继承示例,class Employee String name; /姓名 char sex; /性别 Employee(String n, char s) name = n; sex = s; public String getName() return name; public char getSex() return sex;,class Worker extends Employee char category;/类别 boolean

3、dressAllowance; /是否提供服装津贴 Worker(String n,char s,char c,boolean d) super(n,s); category = c; dressAllowance = d; public char getCategory()return category; public boolean getAll() return dressAllowance; ,class InheDemo public static void main(String args) Worker w = new Worker(“M.John“,M,B,true); Sys

4、tem.out.println(“工人信息“); System.out.println(“姓名 : “+w.getName(); System.out.println(“性别 : “+w.getSex(); System.out.println(“类别 : “+w.getCategory(); if(w.getAll() System.out.println(“提供服装津贴“); else System.out.println(“未提供服装津贴”); ,继承分析,在子类中不能直接访问父类中的私有成员 子类和父类之间应该有“IS-A”关系 不要滥用继承,只有在分类学上有意义时,才应该使用继承 子

5、类具有扩展超类的责任 继承的目的就是为了代码复用,里式代换原则,定义:无论何时,只要程序需要一个超类对象,那么就可以用一个子类对象来替代它。 Employee e; e=new Employee();/需要超类Employee对象 e=new Manager();/用子类对象替换掉超类对象 注意:反过来是不行的 多态和动态绑定 声明类型:对象变量被声明时的类型 实际类型:对象变量实际指向的对象类型 一个对象变量可以指向多种实际类型的现象称为“多态” 在运行时自动选择正确的方法进行调用的现象称为“动态绑定” Java根据对象的实际类型来进行方法调用,方法重载(overloading),方法重载是

6、Java实现面向对象的多态性机制的一种方式。 同一个类中多个方法有相同的名字,不同的参数列表,这种情况称为方法重载。 当重载方法被调用时,Java编译器根据参数的类型和数量来确定实际调用哪个重载方法的版本。 方法重载不考虑方法的返回类型。,重载构造函数,一个类可以有多个构造函数 如果一个类没有定义一个构造函数,Java 编译器将为这个类自动提供缺省构造函数(即无参的构造函数) 缺省构造函数将成员变量的值初始化为缺省值 一旦创建了自己的构造函数, Java 编译器将不再自动提供无参的构造函数。 重载构造函数提供了一组创建对象的方式,可以根据需要决定是否带初始参数。,public class co

7、nstructOverload int x; constructOverload() x=0; System.out.println(“不带参数的构造函数“); constructOverload(int x) this.x=x; System.out.println(“带一个参数的构造函数“); ,方法覆盖(override),方法覆盖是Java实现多态性机制的另一种方式。 在类层次结构中,如果子类中的一个方法与父类中的方法有相同的返回类型、相同的方法名并具有相同数量和类型的参数列表,这种情况称为方法覆盖。 当一个覆盖方法通过父类引用被调用,Java根据当前被引用对象的实际类型来决定执行哪个

8、版本的方法。 可以通过super关键字调用直属父类中被覆盖的方法版本。,方法覆盖示例,class SuperClass int a; SuperClass() a = 10; public void printA()System.out.println(“父类中a =“+a); class SubClass extends SuperClass int a; SubClass(int a) this.a = a; public void printA() System.out.println(“子类中a = “+a); ,public class OverrideDemo public sta

9、tic void main(String args) SuperClass s1 = new SubClass(10); s1.printA(); ,将调用子类的printA方法,包(package),在Java中,包主要有以下用途 : 将类进行分类组织存放 避免命名冲突 包允许在更广的范围内保护类、数据和方法 包可以是类、接口和子包的集合 包中的文件被编译成.class文件后被放在与完整包名匹配的子目录中。实际是:基目录包名 嵌套的包之间没有任何关系 例如:包java.util和 java.util.jar就是彼此无关的,使用包,创建包 package mypackage; 在一个Java源

10、文件中,只能使用一个package语句, 并且通常位于Java源文件的第一行 访问 Java 包成员 mypackage.My_Class 导入包 import package_name.*; 在一个Java源文件中,可以使用多个import语句 导入子包 import package_name.cpackage.*;,类的静态成员-static,类中的静态变量、方法或代码块属于类,而不属于某个特定的对象。 类的静态成员可以与类的名称一起使用,而无需创建类的对象。 静态变量或方法也称为类变量或类方法。,用static修饰符修饰,可以是变量、方法或代码块,静态变量,不管创建了类的多少实例,整个类

11、中静态变量的副本只有一个。 引用静态变量的方法: 通过引用类的任一实例 通过类的名称,class StaticDemo static int x = 0; StaticDemo()x+; ,StaticDemo d1 = new StaticDemo(); StaticDemo d2 = new StaticDemo(); d1.x = 100 ; d2.x = 200; testVariable = d1.x;,通过类实例访问 不是一个好方法,StaticDemo d1 = new StaticDemo(); StaticDemo d2 = new StaticDemo(); StaticD

12、emo.x = 100; StaticDemo.x = 200; testVariable = StaticDemo.x;,声明为static的变量实质上就是全局变量,通过类名访问,静态方法,与静态方法相关的几个要点: 类的静态方法只能访问其他的静态成员 静态方法没有this 静态方法不能被覆盖为非静态方法,class StaticFun static int i = 10; int j; static void setValue(int x) j=x;/出错 System.out.println(“ “+ i); ,不能访问非静态变量j,可以访问静态变量i,class StaticTest

13、static void test() class Staticex extends StaticTest void test() /出错 ,Java类属性和对象属性的初始化顺序,首先找到类中的所有静态声明语句(不管位置在哪),把他们初始化为缺省值 然后再按照书写顺序依次处理每一个static的东西 把对象属性初始化为缺省值 按照书写顺序依次处理每一个对象属性的初始化语句 最后执行构造函数,final 关键字/final类,final 修饰符可应用于类、方法和变量。 final在应用于类、方法和变量时意义是不同的,但本质是一样的:final表示不可改变。 声明为final的类不能被继承。 fin

14、al 类示例: java.lang.String,final class TestFinal int i = 7; int j = 1; void f() class Further extends TestFinal ,final类不能被继承,final 方法,在方法声明中使用 final 关键字向编译器表明子类不能覆盖(override)此方法。 在声明类中,一个 final 方法只被实现一次。 如果一个类为 final 类,那么它的所有方法都为隐式的 final 方法。,class TestFinal final void f() class Further extends TestFi

15、nal final void f() ,final方法不能被覆盖,final 变量,一个变量可以声明为final,这样做的目的是阻止它的内容被修改。 声明final变量后,只能被初始化一次,然后就不能对其值进行修改。 一个final变量实质上是一个常量。,class FinalDemo public static void main(String args) final int noChange = 20; noChange = 30; ,final变量不能被修改,抽象类 1-1,定义:一种类型,只提供部分方法的具体实现。 语法:abstract class 类名. 一般情况下,抽象类既包含具

16、体方法,又包含抽 象方法。 具体方法:既有方法的声明,又有方法的实现(即有方法体)。 抽象方法:只有方法的声明,而没有方法的实现(即没有方法体)。语法: abstract 返回类型 方法名(参数列表) 抽象类不能被实例化,只能被继承。,abstract 修饰符可与类和方法一起使用,抽象类 1-2,抽象类就是用来继承的 子类必须为抽象类中的所有抽象方法提供具体实现,否则,子类也将是一个抽象类 抽象类中可以声明实例变量,这些实例变量就是为了提供给子类继承的 抽象类可以有一个或多个构造函数,它是提供给子类进行调用的 特别地,抽象类中的所有方法都可以是具体方法,抽象类示例,abstract class

17、 Employee int basic = 2000; abstract void salary();/抽象方法 class Manager extends Employee void salary() System.out.println(“薪资等于 “+basic*5); class Worker extends Employee void salary() System.out.println(“薪资等于 “+basic*2); ,抽象方法没有方法主体,在子类中提供实现,在子类中提供实现,Java接口 2-1,定义:一种类型,不包含任何具体方法。换言之,所有方法都是抽象方法 语法:pub

18、lic interface 接口名 接口不能被实例化 接口中的抽象方法不需要abstract修饰 一个类可以继承接口,而且可以同时继承多个接口。一个类继承一个接口被称作“接口继承”;通过一个类同时继承多个接口可以在Java中实现“多重继承”,Java接口 2-2,接口中的方法被默认为是public的,所以在实现一个接口的时候,来自接口中的方法必须定义成public 接口中可包含基本数据类型的数据成员,但它们都默认为是public static final的,因此,这些数据成员是静态常量。 一个接口也可以继承一个或多个接口,语法为:interface 接口名 extends 接口1, , 接口n

19、 ,创建接口的步骤2-1,/ 有方法的接口 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; ,定义一个接口:,创建接口的步骤2-2,用关键字 implements 实现接口,例如: class de

20、mo implements myinterface 如果有一个以上接口被实现,则用逗号隔开接口名称,如下所示: 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( ); ,class B implements A public void show( ) System.out.println(“g=“+g); ,接口的意义,将对象的行为和对象行为的实现分割开来,使可插入性变得可能。 接口就是需要由其他类实现的行为模板。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1