面向对象程序设计第5章继承与接口课件

上传人:我*** 文档编号:145183359 上传时间:2020-09-17 格式:PPT 页数:27 大小:520.50KB
返回 下载 相关 举报
面向对象程序设计第5章继承与接口课件_第1页
第1页 / 共27页
面向对象程序设计第5章继承与接口课件_第2页
第2页 / 共27页
面向对象程序设计第5章继承与接口课件_第3页
第3页 / 共27页
面向对象程序设计第5章继承与接口课件_第4页
第4页 / 共27页
面向对象程序设计第5章继承与接口课件_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《面向对象程序设计第5章继承与接口课件》由会员分享,可在线阅读,更多相关《面向对象程序设计第5章继承与接口课件(27页珍藏版)》请在金锄头文库上搜索。

1、本次内容,类的继承,4,1,2,3,方法的多态性,抽象类和最终类,接口,二、方法的多态性,多态性:发送消息给某个对象,让该对象自行决定响应何种行为。通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用。 java 遵循原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。 1. 如果a是类A的一个引用,那么,a可以指向类A的一个实例,或者说指向类A的一个子类。 2. 如果a是接口A的一个引用,那么,a必须指向实现了接口A的一个类的实例。,二、方法的多态性,引用变量有两个类型

2、,编译时的类型,运行时的类型,由声明该变量时使用的类型决定,由实际赋给该变量的对象决定,如果编译时的类型和运行时类型不一致,就出现多态(Polymorphism)。,Hello h=new TestHello();,Hello h=new Hello();,二、方法的多态性,编译时类型和运行时类型完全一样,不存在多态,编译时类型和运行时类型完全一样,不存在多态,编译时类型和运行时类型不一样,多态发生,ploymophicBc.sub();/对么?,二、方法的多态性,子类是一种特殊的父类,因此Java允许把一个子类对象直接赋给一个父类引用变量,无须任何类型转换,或者被称为向上转型(upcasti

3、ng),向上转型由系统自动生成。,当把一个子类对象直接赋给父类引用变量,运行时调用该引用变量的方法时,其方法行为总是像子类方法的行为,而不是像父类方法行为,这将出现相同类型的变量、执行同一个方法时呈现出不同的行为特征,这就是多态。,对象的属性不具有多态性,返回主菜单,二、方法的多态性,记住一个很简单又很复杂的规则,一个类型引用只能引用引用类型自身含有的方法和变量。 你可能说这个规则不对的,因为父类引用指向子类对象的时候,最后执行的是子类的方法的。 其实这并不矛盾,那是因为采用了后期绑定,动态运行的时候又根据型别去调用了子类的方法。而假若子类的这个方法在父类中并没有定义,则会出错。,返回主菜单,

4、三、抽象类和最终类,引入,class Shape public String calPerimeter()/计算周长 /*各种形状计算周长的公式不同,此处如何书写?*/ ,class Triangle extends Shape public String calPerimeter / public static void main(String args) Shape t=new Triangle(); ,如果去掉此方法,降低程序的灵活性,使用抽象方法即可满足要求:只有方法签名,没有方法的具体实现。,三、抽象类和最终类,public abstract class Shape System.o

5、ut.println(执行Shape的初始化块.); private String color; public abstract double calPerimeter(); public abstract String getType(); public Shape() public Shape(String color) System.out.println(执行Shape的构造器.); this.color = color; public void setColor(String color) this.color = color; public String getColor() re

6、turn this.color; ,抽象类,用abstract修饰,抽象方法,注意和空方法体的区别,三、抽象类和最终类,使用规则,抽象类必须使用abstract来定义,抽象方法也必须使用abstract来定义,抽象方法不能有方法体。,抽象类不能被实例化,无法使用new调用构造器创建抽象类的实例,即使抽象类里不包含抽象方法。,抽象类的构造器主要是用于被其子类调用。,abstract不能用于修饰局部变量、属性、构造器。,三、抽象类和最终类,public class Triangle extends Shape private double a,b,c; public Triangle(String

7、 color , double a , double b , double c) super(color); this.setSides(a , b , c); public void setSides(double a , double b , double c) if (a = b + c | b = a + c | c = a + b) System.out.println(三角形两边之和必须大于第三边); return; this.a = a; this.b = b; this.c = c; public double calPerimeter() return a + b + c;

8、public String getType() return getColor() + 三角形; ,调用父类(抽象类)的构造函数,重写父类的抽象方法,三、抽象类和最终类,public class Circle extends Shape public double radius; public Circle(String color , double radius) super(color); this.radius = radius; public double calPerimeter() return 2 * Math.PI * radius; public String getType

9、()return getColor() + 圆形; public static void main(String args) Shape s1 = new Triangle(黑色 , 3 , 4, 5); Shape s2 = new Circle(黄色 , 3); System.out.println(s1.getType(); System.out.println(s1.calPerimeter(); System.out.println(s2.getType(); System.out.println(s2.calPerimeter(); ,调用父类(抽象类)的构造函数,重写父类的抽象方

10、法,编译时类型和运行时类型不一样,多态发生,利用抽象类和抽象方法的优势,可更好的发挥多态的优势,使程序更加灵活。,三、抽象类和最终类,抽象:从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模板,从而避免了子类设计的随意性。,抽象类体现的是一种模板模式的设计。,三、抽象类和最终类,不可改变,final关键字,final变量,表示该变量一旦获得了初始值之后就不可改变,final修饰成员变量,final修饰局部变量,不可被重写,如果出于某些原因,不希望子类重写父类的某个方法,则可以使用final修饰该方法,final方法,三、抽象类和最终类,最终类是指不能被继承的类,即不能再用最终

11、类派生子类。例如: public final class C 如果创建最终类似乎不必要,而又想保护类中的一些方法不被覆盖,可以用关键字final来指明那些不能被子类覆盖的方法,即最终方法。,返回主菜单,final类,finaldata,返回,class Valueint i=1; public class Finaldata final int i1=9; static final int i2=99; public static final int i3=999; final int i4=(int)(Math.random()*20); static final int i5=(int)(

12、Math.random()*20); Value v1=new Value(); final Value v2=new Value(); static final Value v3=new Value(); final int a=1,2,3,4,5; public static void main(String args) final double d; d=5.6; d=3.4; ,finalmethod,返回,public class FinalMethod class Sub extends FinalMethod public void test() ,出现编译错误,不能重写fina

13、l方法,public final void test(),private final void test(),不是重写父类的方法,没问题!,final方法只是不能被重写,完全可以被重载!,四、接口,接口(interface): 更彻底的抽象(totally abstract class) 不能包含普通方法,而全部都是抽象方法,接口层次,类层次,对象层次,PCI接口规范,A型号PCI实现,B型号PCI实现,A型号的PCI插槽1,A型号的PCI插槽2,B型号的PCI插槽1,B型号的PCI插槽2,让规范和实现分离正是接口的好处。 例:只要显卡遵循PCI接口规范,就可以插入PCI插槽,主机板无须关心显

14、卡内部如何实现的、是哪个厂家的产品等细节。,四、接口,接口的定义格式为: 修饰符interface接口名extends 父接口1,父接口2,只能是public或者省略,和类名的命名规则相同,一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类,由于接口只是规范,所以接口里不能包括构造器、初始化块。,四、接口,接口中的成员变量全部隐含为public final static型, 所有方法都是public的,即使没有声明。,接口中定义的所有成员变量都必须设置初值,四、接口,接口的定义,public interface Output int Max_CACHE_LINE=50; void o

15、ut(); void getData(String msg); ,接口里定义的属性只能是常量 相当public static final int,接口支持多继承,子接口扩展某个父接口,将会获得父接口里定义的所有抽象方法、常量属性等。,一个Java源文件里最多只能有一个public接口,如果一个Java源文件里定义了一个public接口,则该源文件的主文件名必须与该接口名相同。,四、接口,接口的继承,interface interfaceA int PROP_A = 5;void testA(); interface interfaceB int PROP_B = 6;void testB();

16、 interface interfaceC extends interfaceA, interfaceB int PROP_C = 7;void testC(); public class TestInterfaceExtends public static void main(String args) System.out.println(interfaceC.PROP_A); System.out.println(interfaceC.PROP_B); System.out.println(interfaceC.PROP_C); ,定义类时实现接口用关键字implements。一个类只能继承一个父类,但可以实现若干个接口。,类定义的完整格式是: 修饰符class类名extends父类名 implements接口名1,接口名2,,必须放在extends之后,四、接口,一个类实现了一个或多个接口之后,该类必须完全实现这些接口里所定义的全部抽象方法(即:重写)。 否则,该

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

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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