面向对象高级特性.ppt

上传人:牧羊曲112 文档编号:6613311 上传时间:2023-11-18 格式:PPT 页数:28 大小:302.14KB
返回 下载 相关 举报
面向对象高级特性.ppt_第1页
第1页 / 共28页
面向对象高级特性.ppt_第2页
第2页 / 共28页
面向对象高级特性.ppt_第3页
第3页 / 共28页
面向对象高级特性.ppt_第4页
第4页 / 共28页
面向对象高级特性.ppt_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《面向对象高级特性.ppt》由会员分享,可在线阅读,更多相关《面向对象高级特性.ppt(28页珍藏版)》请在三一办公上搜索。

1、第5章 面向对象高级特性,5.1 变量多态5.2 非访问控制符 5.3 接口 5.4访问控制符5.5内部类,5.1 变量多态,定义 类型为X的参考变量,其指向的对象类型既可以是X,也可以是X的子类。例如:Student s1,s2;s1=new Student(651003,王五);s2=new Collegian(0810123,张三,计算机);主意:s2就是变量多态。例5-1动态绑定:编译器通过检查变量的类型来确定相关方法能否被调用;而运行时,具体访问的哪个方法被调用由变量指向的对象类型来确定。,5.1 变量多态,改进后的例5-1用途(1)用于异类收集 基于变量多态,可以把具有继承关系的对

2、象集合到同一个数组中。例如:Student s;s=new Student2;s0=new Student(651003,王五);s1=new Collegian(0810123,张三,计算机);,5.1 变量多态,(2)用于方法参数传递 实参是形参的子类对象。例如:在Stack类中的public int search(Object o)类型判断其格式为:对象 instanceof 类该运算符的作用就是判断左边的对象是不是右边的类型,如果是结果为true,否则为false。,5.1 变量多态,参考类型转换总结 即子类向父类的转换可以自动进行,而父类向子类的转换则需要指明,且看是否能转换。1.正

3、确的转换1子类变量给父类变量赋值例5-3 2.错误的转换1父类变量给子类变量赋值例5-4,5.1 变量多态,3.错误的转换2指向父类对象的父类变量强制转换为子类类型例5-54.错误的转换2指向子类对象的父类变量给子类变量赋值例5-65.正确的转换2能正确强制类型转换为子类类型的变量给子类变量赋值例5-7,5.2非访问控制符,5.2.1 static static可以修饰变量、方法。1.类变量(静态变量)类变量和实例变量的区别:类变量可以通过类名访问;实例变量通过对象名进行访问,5.2.1 static static可以修饰变量、方法。1.类变量(静态变量)类变量和实例变量的区别:例5-8,5.

4、2非访问控制符,类变量和成实例变量的内存分布,5.2非访问控制符,2.类方法(静态方法)类方法也不需要创建对象,直接通过类名访问。(1)类方法只能直接访问类变量或方法参数,不能直接访问实例变量。但在非静态的方法中,可以直接访问本类中的静态变量和非静态变量。例5-9(2)静态方法不能直接访问非静态方法。例5-10,5.2非访问控制符,3.类变量的作用例5-11 final可以修饰类、方法和变量 1.修饰类final修饰的类为最终类,不能被继承。例5-12,5.2非访问控制符,2.修饰方法final修饰的方法是最终方法,不能被覆盖。例5-133.修饰变量final修饰的“变量”是字符常量,代表常量

5、,在一次赋值后其值不能改变。例5-14,5.2非访问控制符,5.2.3 abstract abstract可以修饰类和方法。1.修饰类 abstract修饰的类是抽象类,即类中有些内容(方法)还没有定义完整。不能创建抽象类的对象,抽象类一般是用来做父类的,即它可以被其它类继承。abstract与final“相克”,它们不能修饰同一个类。例5-15,5.2非访问控制符,2.修饰方法abstract修饰的方法是抽象方法,也就是只定义了方法头部,没有方法体。例如:abstract void tt();3.修饰类和修饰方法的关系(1)抽象类不一定含有抽象方法,但含有抽象方法的类一定是抽象类。例:改进后

6、的5-15,5.2非访问控制符,(2)如果子类没有实现抽象类中所有的抽象方法,那么子类要定义为抽象类。例4.抽象类的作用抽象类的作用就是做父类。例5-16:作为一个公司可能有很多种交通工具,编程计算每天所有交通工具的耗油总量。,5.3接口,说明 Java通过接口来弥补它单重继承的不足,接口之间是多重继承,即一个接口可以有多个父接口,而且一个类可以实现多个接口。接口定义 接口定义的格式:interface 接口名 接口体,5.3接口,接口中的方法不给出方法体,是抽象方法,即都是public、abstract的方法;接口中只允许定义常量,不允许定义变量,接口中的成员变量都是public、stati

7、c、final型的;方法的修饰符及变量的修饰符都是可以省略的。例5-17,5.3接口,实现实现接口的格式:class 类名 implements 接口名列表 类体类实现接口意味着类首先要继承接口,然后再重写方法体。一个类实现一个接口,如果该类不是抽象类,则必须实现接口中每个方法,即给出每个方法的方法体。如果一个类同时实现多个接口,接口名之间用逗号隔开。例5-17改进,5.3接口,5.3.4 综合举例例5-18用接口重写例5-16。,5.4访问控制符,限定范围访问控制符是在程序中控制对类以及类的方法和成员变量访问权限的修饰符。当类、方法和成员变量没有访问控制符修饰时,它们具有缺省访问性。,5.4

8、访问控制符,举例例5-191.定义类pub,并将其放入包accs中(1)不同包、非子类 p1.java(2)同一个包 p2.java,5.4访问控制符,(3)非同包中的子类 p3.java说明访问控制符对方法覆盖会产生影响,其规则是:在覆盖时,子类的方法不能比父类的同名方法更难访问。例5-20,5.5内部类,内部类是定义在其它类的内部的一种类,含有内部类的类称为外部类。内部类可分为:非静态内部类、静态内部类、方法内部类、匿名内部类。内部类的主要作用就是直接访问外部类的成员 非静态内部类 非静态内部类在外部类中与外部类的方法处于等同的位置。非静态内部类定义的一般格式:class Outer cl

9、ass Inner,5.5内部类,编译上述代码会产生两个文件:Outer.class和Outer$Inner.class。关于非静态内部类的几点说明:(1)非静态内部类内不允许有任何静态声明。例如下面代码不能通过编译。class Outer class Inner static int a=10;,5.5内部类,(2)在外部类的非静态方法中创建内部类对象。例5-22(3)在外部类的静态方法中创建内部类对象。例5-23(4)相同变量名的区分在内部类的方法中使用局部变量可以直接使用变量名,用“this.变量名”表示内部类的成员变量,用“外类名.this.变量名”表示外类的成员变量。例5-24,5.

10、5内部类,(5)修饰符非静态内部类可用的修饰符有:public、protected、private、final、abstract。例如:class Outer3 public abstract class Inner;,5.5内部类,静态内部类 当内部类用static修饰时,就成为静态内部类。(1)创建静态内部类对象时,不用事先创建外部类的对象。例5-25(2)静态内部类只能直接访问外部类的静态成员,不能直接访问外部类的非静态成员,如果一定要访问,必须通过外部类的对象进行访问。例5-26,5.5内部类,方法内部类把类定义在方法内,就称为方法内部类。方法内部类的作用域与局部变量相同,只能在本方法内被访问。例5-27 匿名内部类匿名内部类是没有名字的内部类,它继承了某个类或实现了某个接口。它只有类的主体部分,没有类的声明,类的主体部分紧跟new。例5-28,作业,定义一个类shape,它有个抽象方法getArea().这个类有三个子类分别是:circle,rectangle and triangle。每个子类都有构造器初始化属性(用来计算面积),并都重写了方法getArea(),以此来计算自己的面积。写一个主类,计算三种图形的面积之和。,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号