《Java类的特性》PPT课件.ppt

上传人:cn****1 文档编号:568216278 上传时间:2024-07-23 格式:PPT 页数:49 大小:680.51KB
返回 下载 相关 举报
《Java类的特性》PPT课件.ppt_第1页
第1页 / 共49页
《Java类的特性》PPT课件.ppt_第2页
第2页 / 共49页
《Java类的特性》PPT课件.ppt_第3页
第3页 / 共49页
《Java类的特性》PPT课件.ppt_第4页
第4页 / 共49页
《Java类的特性》PPT课件.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《《Java类的特性》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《Java类的特性》PPT课件.ppt(49页珍藏版)》请在金锄头文库上搜索。

1、主要内容qJava类和对象的概念 (oop思想-内功 语言外功)q类的结构(包含属性和行为)以及如何生成对象q类的3大特性:封装,继承,多态q打包的使用q常用方法:包装类、equals、toString等this引用q每个方法内部,都有一个this引用变量,指向调用该方法的对象。一般情况下,成员前加不加this都行,这就好像同一个学校的学生在谈论自己学校的事时,不必说学校名字一样,当然为了强调,可以加上“咱们学校”的前缀q但在有些情况下,非得用this关键字不可q1、类成员变量和方法参数名字相同(这有利于程序的可读性,为了区分,使用this关键字)Class Dateint year;publ

2、ic void setDate(int year) this.year=year;this引用(续)q2、构造方法是在对象产生时由Java自动调用的,我们在程序中不能象调用其它方法一样去调用构造方法,但可以在一个构造方法中用this(参数表)的形式来调用另一个构造方法,有时可大大简化程序 注意: this(参数表)必须是使用它的方法的 第一条语句面向对象编程的特性q我们已经了解了类和对象,现在我们来了解一下面向对象编程的一些特性: 继承、封装、多态面向对象编程的三大特点q封装性(封装性(Encapsulation):实现模块化(modularity)和信息隐藏(information hidi

3、ng),有利于程序的可移植性。q继承性(继承性(Inheritance):可以定义一套对象之间的层次关系,下层的对象继承了上层对象的特性,籍此可以实现程序代码重用,并且有效的组织整个程序。q多态性(多态性(Polymorphism):根据程序运行时对象的实例类型来选择不同的信息处理。提高程序的可读性和灵活性。n自然界通过继承而繁衍发展自然界通过继承而繁衍发展(龙生龙,凤生凤,老鼠儿子会打洞)(龙生龙,凤生凤,老鼠儿子会打洞)n程序中的继承是程序中的继承是从抽象到具体从抽象到具体的过程的过程(学生(学生ACCPACCP学员,学生不一定是学员,学生不一定是accpaccp学员,但学员,但accpa

4、ccp学学 员一定是学生员一定是学生)n继承重用现有类生成新类继承重用现有类生成新类nJavaJava语言是语言是单继承单继承语言,即每个子类只有一个语言,即每个子类只有一个直接父类直接父类继承继承举例爬行动物类哺乳动物类动物类从抽象到具体继承q被继承的类称为父类q继承父类的类称为子类q执行继承时,子类将获得父类的属性,并具有自身特有的属性。 继承是面向对象编程技术的一块继承是面向对象编程技术的一块基石,它允许创建分等级层次的基石,它允许创建分等级层次的类。运用继承,可以创建一个通类。运用继承,可以创建一个通用类定义一系列一般特性。该类用类定义一系列一般特性。该类可以被更具体的类继承可以被更具

5、体的类继承Person类:类: name ageStudent类:类: number Teacher类:类: empClass人类,具人类,具有姓名和年有姓名和年龄两个属性龄两个属性学生类,继承了父学生类,继承了父类的姓名和年龄属类的姓名和年龄属性外还包含学号性外还包含学号老师类,继承了老师类,继承了父类的姓名和年父类的姓名和年龄属性外还包含龄属性外还包含职称职称extends关键字qextends关键字用于继承类。q声明一个继承父类的类的通常形式如下: class subclass-name extends superclass-name /类体 Java中所有类都由中所有类都由Object

6、类派生而来,若没有类派生而来,若没有extends,则默认父类为则默认父类为Object(在在lang包中包中)每个类只能有一个直接父类,即单继承,每个类只能有一个直接父类,即单继承, Java中用接中用接口实现多继承口实现多继承注意直接继承和间接继承q直接继承class A class B extends A /A是B的直接父类 q间接继承class A class B extends A class C extends B /A是C的间接父类 继承的例子class Vehicle /车辆类int VehicleID;/车辆的ID号void setId(int ID)/给ID号赋值Vehic

7、leID = ID; void displayID()/显示车辆的ID号System.out.println(”车辆的号码是:”+VehicleID);class Car extends Vehicle /轿车类int mph;/车辆的时速void setMph(int mph)this.mph = mph; void displayMph()System.out.println(”轿车的时速是:”+mph);class VehicleDemo public static void main(String args) /产产生一个生一个车辆车辆的的对对象象 Car benz = new Car

8、(); benz.setID(9527); benz.setMph(10); benz.displayID(); benz.displayMph(); 成员变量的隐藏q子类通过隐藏父类的成员变量和重写父类的方法,可以把父类的状态和行为改变为自己的状态和行为。class Aint x;void setX()x = 0; class B extends A /A是B的直接父类int x;/隐藏了父类中的变量Xvoid setX()/重写了父类中的方法setX()x = 5;super关键字qJava提供一个super引用变量表示父类qsuper关键字用来解决如何直接访问或初始化从父类继承来的成员。

9、q在写子类无参数构造方法时,不用显式调用父类无参数构造方法,系统会自动提供 q但在写子类带参数构造方法时,应在第一句写super(参数)来初始化父类成员变量见下页Super的例子一class Father int x;Father()x = 3;System.out.println(“Calling Father : x=”+x);void doSomething()System.out.println(“Calling Father.doSomething”);class Son extends Fatherint x;Son()super();x = 5;System.out.printl

10、n(“Calling Son : x=”+x);void doSomething()super.doSomething();System.out.println(“Calling Father.doSomething”);System.out.println(“Father.x=”+super.x+” Son.x=” +x);class SuperDemo public static void main(String args) Son son = new Son(); son.doSomething(); 继承示例class Person String name; /姓名 int age;

11、/年龄 Person() name = ”Tom”; age = 18; Person(String n, int a) name = n; age = a; public String getName() return name; public int getAge() return age;class Student extends Person int number;/学号学号Student()Student(String n,int a,int no) number = no; public int getNumber()return number; super(n,a);class

12、InheDemo public static void main(String args) Student s = new Student(); System.out.println(“缺省学生缺省学生信息信息); System.out.println(姓名姓名 : +s.getName(); System.out.println(年龄年龄 : +s.getAge(); System.out.println(学号学号 : +s.getNumber(); Student s1 = new Student(John,20,101); System.out.println(学生学生信息信息); Sy

13、stem.out.println(姓名姓名 : +s1.getName(); System.out.println(年龄年龄 : +s1.getAge(); System.out.println(学号学号 : +s1.getNumber(); 继承的进一步理解q某类对象引用毫无疑问指向该类对象,但若两个类有继承关系,则对象引用和对象就可能存在4种组合,例:qPerson p=new Person();qStudent s=new Student();qPerson ps=new Student();ok /向上塑型qStudent stu=new Person();errorq结论:父类对象引

14、用可指向它的任何子类对象,不论是直接还是间接子类,反之不行多态q同样的操作在不同的对象上有不同的行为炼钢工人炼钢工人CEO教师教师对各个子类实现的相同对各个子类实现的相同方法将产生不同的结果方法将产生不同的结果静态多态(方法重载)q不止是构造方法可以重载,其实任何方法都能重载q方法重载:就是在同一个类中具有相同名称,执行基本相同操作,但是使用不同的参数列表的一组方法q编译器通过参数的个数和类型确定调用重载方法的哪个版本 例:System.out.println(String); System.out.println(int);重载类型q参数类型不同int add(int,int);float

15、add(float,float);q参数个数不同int add(int,int);int add(int,int,int);注意:若参数类型和个数都相同,返回类型不同不算重载方法重载的作用域规则q重载机制只有在方法声明的同一作用域内才有效 class firstpublic: void display();class secondpublic: void display();void main() first object1; second object2; /没有发生没有发生方法重载方法重载 object1.display() object2.display();方法的重载例子q方法的重载

16、public int div(int i,int j) return i/j; public double div(double d1,double d2) return d1/d2; public double div(int i) return i/5; 方法重载练习q1.编写一个adder类,包含三个add方法,分别实现两整数的相加/两浮点数的相加/两字符串的连接q2.编写adder类的测试程序方法重载练习q方法签名的三要素q方法名q方法参数个数q方法参数类型q哪个方法是对方法public void method().的重载?qA)public void method2( int m).

17、 qB)public int method().q C)public void method().qD)public int method( int m, float f). 动态多态(方法重写) 在继承中,如果子类的一个方法与父类中的方法有相同的名字并具有相同数量和类型的参数,这种情况称为方法覆盖q父类对象调用父类方法,子类对象调用子类方法q可以通过super关键字调用直接父类中被覆盖的方法 方法重写的例子class C void abc()System.out.println(“Calling Cs” method abc);Class D extends C void abc()Syst

18、em.out.println(“Calling Ds” method abc);Public class Dispatch()public static void main(String args)C c = new D();c.abc();方法重载与方法重写的区别q重载: 1.同一类中 2.同方法名称,但不同参数类型或者不同参数个数q重写 1.父类与子类中 2.除了方法体不同,其它都相同static 类变量qstatic修饰符q用于标识该成员是类成员,还是类实例(对象)的成员q如:static int i=100;q类变量的使用q通过类直接调用q通过对象调用q类变量与实例变量的区别:q实例变

19、量,由类产生的每个对象都具有实例变量的一个副本;q类变量,在内存中只存在一个地方,可以被类的所有实例访问,并对于所有实例都拥有相同的信息。q类变量的使用举例q统计对象创建的个数static变量使用实例q为Student类添加一个静态变量cTotalNum,用于统计创建的学生对象数。 static方法q类方法(静态方法)如:static double add(double x,double y)return x+y;q类的方法可以通过类名与对象两种方法访问q思考:为什么Main方法中只能访问静态变量和静态方法?static修饰符(判断对错)class Apublic static void ma

20、in(String args)double a=5.1;double b=20.32;double c=32.921;System.out.println(doubleAvg(a,b,c);double doubleAvg(double a,double b,double c)return (a+b+c)/3.0;static double doubleAvg(double a,double b,double c)return (a+b+c)/3.0;请修改错误!关键字finalqfinal关键字可以修饰类、变量和方法qfinal关键字修饰变量常量:只能被初始化1次 final double

21、PI = 3,1415;qfinal关键字修饰方法:不能进行扩展,也不允许子类覆盖,但是可以继承final void aMethod() ;qfinal关键字修饰类:不能被集成的类,final类中的方法都成为了final方法final class FinalClassvoid method();Final的例子final class AFinalClassfinal String strA=“This is a final String”;public String strB=“This is not a final String”;final public void print()Syste

22、m.out.println(“a final method name print”);public void showString()System.out.println(strA+“n”+StrB);Public class FinalDemo()public static void main(String args)AFinalClass f = new AFinalClass();f.print();f.showString();封装q信息隐藏电视内有很多复杂零件,通过各种按钮将内部的复杂结构给隐藏了。q简化操作只需通过调频和音量等少量按钮,就可以操纵电视。q程序的基本封装单元是类,通过

23、类的封装,既可以将代码单元化,又达到信息隐藏的目的。简单访问控制q我们可在数据成员和成员函数前面添加修饰符public和private(protected后面详细讲解)qpublic成员可从类外部的任何地方访问。 q而private成员将被隐藏,在类外不可见,这体现了数据封装的思想。q要从类外访问private成员,只能通过类的public成员函数来实现。 与类相关的几个知识点 我们学习了面向对象的3大特性,现在了解几个相关的知识点:qinstanceof运算符qObject 类qequals()方法qtoString()方法qVector类instanceof运算符q对象引用既可指向本类对象

24、,又可指向子类对象,为判断对象类型,Java采用instanceof运算符q用instanceof运算符确定对象类型后,就可将父类引用转换成相应的子类引用,以便访问子类独有的属性或方法Object 类qObject类是类体系结构的根qJava 系统中的每个类都是 Object 类直接或间接的子类qObject 类包括在 java.lang 包中q此类定义了所有对象都具备的基本状态和行为q可以用类型为Object的变量来引用任意类型的对象 equals()q用于比较两个对象是否相等,相等返回 trueq但Object 类中提供的 equals 方法仅仅使用来确定对象是否相等,称为浅度比较q因此子

25、类一般通过覆盖Object的equals方法来实现真正的比较,称为深度比较toString()qtoString 用于返回对象的字符串表示。 q建议所有子类都覆盖此方法。q使用“+”运算符将对象同一个字符串连接,Java编译器会自动调用toString方法,获取对象的字符串表现形式。 VectorqVECTOR是一种容器,用来存放对象 需要导入util包。import java.util.Vector;q只有对象才能放到VECTOR中,存放进VECTOR中的对象都自动转换成Object类对象,取出来的时候需要强制转换成原始的类型。q常用方法: 参考Vector的常用方法.txt包装类q使用8种

26、基本数据类型声明的变量不是对象qJAVA提供包装类,可以将基本数据类型当作对象操作q每种基本数据类型都有对应的包装类 对应关系如下表:包装类原始数据原始数据类型型包装包装类byte(字节)Byte char(字符)Character int(整型)Integerlong(长整型)Long float(浮点型)Floatdouble(双精度)Double boolean(布尔)Booleanshort(短整型)Short Java包(package)q当编译Java源程序时,对其中的每个类都生成一个.Class文件,为统一组织和管理它们,Java使用了包q包类似于文件夹,一组相关的类被放在一起

27、建议每个文件只写一个类,然后用包将相关的类进行组合包的用途q包允许你将类文件组织起来,便于查找和使用合适的类。q包不仅包含类和接口,还能包含其它包,从而形成有层次的包空间。q包有助于避免命名冲突。当你使用很多类时,确保类和方法名称的唯一性是非常困难的。包能够形成层次命名空间,缩小了名称冲突的范围,易于管理名称。使用包创建包package mypackage; 访问 Java 包成员 mypackage.My_Class导入包import package_name.*;导入子包import package_name.Student.*示范一个打包,并访问包内的CLASS包的访问权限public-公共q所有类都可以访问protected-保护q可被子类访问,不管是同一个包还是不同包q同一个包中非子类需要通过对象访问private-私有 q只有自身类才能访问,其它类一概不能访问friendly-友好(默认,不是关键字)q可被同一包的所有的类访问访问权限privatefriendlyprotectedpublic同一类中的成员YYYY同一包中的其他类NYYY不同包的子类NNYY不同包的不同类NNNY 总结q面向对象的编程思路q面向对象的3大特性:封装、多态、继承q包的使用抽象爬行动物类哺乳动物类动物类抽象从具体到抽象

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

最新文档


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

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