Java程序设计与实训 教学课件 ppt 作者 黄能耿 PPT电子教案 java-03-2

上传人:E**** 文档编号:89156216 上传时间:2019-05-19 格式:PPT 页数:26 大小:1.75MB
返回 下载 相关 举报
Java程序设计与实训 教学课件 ppt 作者 黄能耿 PPT电子教案 java-03-2_第1页
第1页 / 共26页
Java程序设计与实训 教学课件 ppt 作者 黄能耿 PPT电子教案 java-03-2_第2页
第2页 / 共26页
Java程序设计与实训 教学课件 ppt 作者 黄能耿 PPT电子教案 java-03-2_第3页
第3页 / 共26页
Java程序设计与实训 教学课件 ppt 作者 黄能耿 PPT电子教案 java-03-2_第4页
第4页 / 共26页
Java程序设计与实训 教学课件 ppt 作者 黄能耿 PPT电子教案 java-03-2_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《Java程序设计与实训 教学课件 ppt 作者 黄能耿 PPT电子教案 java-03-2》由会员分享,可在线阅读,更多相关《Java程序设计与实训 教学课件 ppt 作者 黄能耿 PPT电子教案 java-03-2(26页珍藏版)》请在金锄头文库上搜索。

1、程序设计,第3章 面向对象的程序设计 (二)继承、接口、聚集,2,目录,3.1 面向对象的基本概念,3.2 类的封装,3.3 类的继承,3.4 接口,3.5 聚集,3.6 类的多态,3.7 包,本章分三个PPT,这是第2个文件,3,3.3 类的继承,3.3.1 继承的实现 3.3.2 this和super 3.3.3 抽象类和抽象方法 3.3.4 类对象之间的类型转换 3.3.5 类型检测,4,3.3.1 继承的实现,直接或间接地继承自java.lang.Object类 如果没有指定extends关键字 默认继承Object类 如果指定extends关键字继承某个类 某个类或其本基类仍然继承O

2、bject类 继承基类的成员变量和成员方法 public的属性和方法 protected的变量和方法 (default)的变量和方法,如果在同一个包中 private的变量和方法,不能被继承,5,继承(例),class Shape / 基类 public String color = “white“; / 基类的属性将被继承 public void sayColor() / 基类的方法将被继承,实现了代码的复用 System.out.println(“颜色是:“ + color); class Circle extends Shape / 继承基类,同时继承了基类的属性和方法 public d

3、ouble radius; / 只要声明本身独有的属性 public void area() / 定义本身独有的方法 System.out.println(“圆形面积是:“ + (Math.PI * radius * radius); class Rectangle extends Shape public double length; public double width; public void area() System.out.println(“矩形面积是:“ + length * width); ,例中圆和矩形都继承了形状的属性和方法,6,3.3.2 this和super,this

4、 this是一个引用对象本身的指针,意思是“我” 当前对象的成员变量:this.成员变量 当前对象的成员方法:this.成员方法(参数列表) 当前对象的构造方法:this(参数列表) 引用当前对象:return this;,7,super,super super只用在有继承关系的场合,意思是“父”,而不是“祖父” 直接基类的成员变量:super.成员变量 直接基类的成员方法:super.成员方法(参数列表) 直接基类的构造方法:super(参数列表),8,成员变量的隐藏,如果子类声明了与基类同名的成员变量 在子类中基类的成员变量被隐藏。 子类仍然继承了基类的成员变量,只是将其名字隐藏,publ

5、ic class Demo public static void main(String args) Sub sub1 = new Sub(); Sub sub2 = new Sub(); sub1.a = 1; sub2.a = 2; sub1.setSuperA(11); sub2.setSuperA(22); System.out.println(sub1.a); / 访问对象sub1中子类的属性 System.out.println(sub1.getSuperA(); / 访问对象sub1中基类的属性 System.out.println(sub2.a); / 访问对象sub2中子类的

6、属性 System.out.println(sub2.getSuperA(); / 访问对象sub2中基类的属性 ,class Sub extends Super int a; / 如果注释这条语句会怎样? int getSuperA() return super.a; void setSuperA(int a) super.a = a; ,class Super int a; ,sub1和sub2中基类的属性是独立的,9,成员方法的覆盖,如果子类定义了与基类同名的成员方法 在子类中基类的成员方法被覆盖 子类不再继承基类的方法,public class Demo public static v

7、oid main(String args) Sub sub = new Sub(); sub.showMe(); / 访问子类的方法 sub.showSuperMe(); / 访问基类的方法 class Super void showMe() System.out.println(“这是基类“); class Sub extends Super void showMe() / 如果注释这个方法(共3行)会怎样? System.out.println(“这是子类“); void showSuperMe() super.showMe(); ,10,3.3.3 抽象类和抽象方法,用abstract修

8、饰的类是抽象类 用abstract修饰的方法是抽象方法 特点 抽象类不能被实例化,即不能用new来创建实例。 抽象方法只有方法名、参数列表和返回值类型,但没有方法体 抽象类中可以没有抽象方法,有抽象方法的类一定是抽象类。 抽象方法必须在子类中给出具体实现。 抽象类必须被继承,子类根据自身需要扩展抽象类: 抽象类和抽象方法不能使用private、static、final修饰符 实现全部抽象方法,从而成为普通的类。 不实现全部抽象方法,因此仍然是抽象类。,11,抽象类的用途,实现代码复用 通过对抽象类的继承可以实现代码的复用 复用的是普通方法以及属性,并非复用抽象方法 规范子类的行为 抽象类可以规

9、范子类的行为 通过抽象方法来规范子类的行为,abstract class Shape / 抽象类 public String color = “white“; abstract double area(); / 抽象方法,没有方法体,它强制子类必须实现它 public String getColor() / 普通方法,将被子类复用 return color; class Rectangle extends Shape public double length; public double width; public double area() / 矩形类必须实现area()方法 return

10、length * width; ,12,3.3.4 类对象之间的类型转换,自动类型转换 也称向上转型,子类对象可以自动转换为基类对象 强制类型转换 也称向下转型,基类对象在一定的条件下可以转换成子类对象,但必须使用强制类型转换。 条件只有一条:基类对象所指向的对象实际上就是子类对象的类型。 不能转型 处于相同类层次的类对象之间不能进行转换 没有继承关系的类之间不能进行转换。,13,类型转换(例),对于左图的继承关系,public class Demo public static void main(String args) Super supper = new Super(); Sub1 su

11、b1 = new Sub1(); Sub2 sub2 = new Sub2(); SubSub subSub = new SubSub(); supper = sub1; / 向上转型(子类父类) sub1 = (Sub1) supper; / 向下转型(指向的是子类) / sub1 = sub2; / 没有继承关系,不能转换 / sub1 = (Sub1)sub2; / 没有继承关系,不能转换 supper = subSub; / 向上转型(孙类爷爷类) sub1 = (Sub1) supper; / 向下转型(指向的是孙类父类) subSub = (SubSub) supper; / 向下

12、转型(指向的是孙类孙类) / subSub = (Sub1) supper; / 向下转型,不能这么写 ,14,3.3.5 类型检测,在转换之前对类型进行检测,是一种最安全的方法 使用类型比较运算符instanceof对两个对象的兼容性进行检测 可以为避免类型转换时出现运行时异常,if(subSub instanceof Super) supper = (Super)subSub; ,15,3.4 接口,3.4.1 接口的声明 3.4.2 接口的实现 3.4.3 接口的继承 3.4.4 接口的使用 3.4.5 UML类图 3.4.6 接口的特点,16,3.4.1 接口的声明,接口 接口是抽象程

13、度更高的类 类不允许多继承,而接口可以多继承 接口的声明 使用interface关键字,interface Shape / 这是接口 double PI = 3.14159; / 接口中的变量都是常量 double area(); / 接口是高度抽象的,因此省略abstract关键字 ,17,3.4.2 接口的实现,使用implements关键字,public class Circle implements Shape / 实现接口 double radius; Override public double area() / 实现类必须实现抽象方法 return PI * radius * r

14、adius; interface Shape / 这是接口 double PI = 3.14159; / 接口中的变量都是常量 double area(); / 接口是高度抽象的,因此省略abstract关键字 ,18,3.4.5 UML类图,类、接口 关系 实现、继承、关联、聚集、组合、依赖,19,3.4.3 接口的继承,接口的继承、类对接口的实现、类的继承、聚集等,20,3.4.4 接口的使用,实现接口 通过实现类对接口的实现,实现接口中规范的行为。不同的实现类对行为的实现可能不同,从而实现了多态性。 接口作为数据类型 接口可以作为数据类型 但接口不能被实例化,实例化的是接口的实现 接口作

15、为参数 接口可以作为方法定义时的参数,在实际调用方法时传入接口的实现类。不同实现类的行为不同,从而体现了多态性。,21,接口的使用(例),public class Demo public static void main(String args) Circle c = new Circle(); c.radius = 20; Shape s = c; / 接口作为数据类型 showArea(s); static void showArea(Shape shape) / 接口作为方法的参数 System.out.println(“面积是:“ + shape.area(); interface Shape / 这是接口 double PI = 3.14159; / 接口中的变量都是常量 double area(); / 接口是高度抽象的,因此省略abstract关键字 class Circle implements Shape double radius; Override public double area() / 实现类必须实现抽象方法 return PI * radius * radius; ,22

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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