第3讲类对象和方法.ppt

上传人:sccc 文档编号:5636852 上传时间:2023-08-04 格式:PPT 页数:73 大小:731.01KB
返回 下载 相关 举报
第3讲类对象和方法.ppt_第1页
第1页 / 共73页
第3讲类对象和方法.ppt_第2页
第2页 / 共73页
第3讲类对象和方法.ppt_第3页
第3页 / 共73页
第3讲类对象和方法.ppt_第4页
第4页 / 共73页
第3讲类对象和方法.ppt_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《第3讲类对象和方法.ppt》由会员分享,可在线阅读,更多相关《第3讲类对象和方法.ppt(73页珍藏版)》请在三一办公上搜索。

1、第三讲面向对象编程,计算机学院 赵卓君,回顾,Java 的数据类型:原始数据类型、引用数据类型数据转换有两种类型:自动类型转换和强制类型转换Java 提供了一组丰富的运算符数组用于将相同数据类型的多项数据存储在连续的内存单元中Java 支持以下控制语句编程结构:if else,switchfor,while,do-while,计算机学院 赵卓君,本讲目标,类和对象的概念(重点、难点)在Java中实现类并创建对象(重点)方法的定义、调用、和参数的传递(重点)构造函数(重点、难点)this关键字(重点)包的使用(重点)继承和多态(重点、难点)访问修饰符和方法修饰符(重点、难点)接口(重点、难点)内

2、部类(嵌套类)(难点)枚举,计算机学院 赵卓君,英语单词-1,class类object对象OOP-Object Oriented Programming面向对象编程constructor构造器,构造方法property属性,特性method方法protect受保护package包extends扩充,延伸,伸展static静态的,计算机学院 赵卓君,英语单词-2,extends扩充,延伸,伸展static静态的final结局,决赛,期末考试abstract抽象interface接口implement实现overload重载override重写,覆盖nested嵌套anonymous匿名enum枚

3、举,计算机学院 赵卓君,面向对象编程,OOP,计算机学院 赵卓君,对象,对象,“对象是存在的具体实体,具有明确定义的状态和行为。”,计算机学院 赵卓君,对象的示例,计算机学院 赵卓君,属性,事物的特性在类中表示为变量每个对象的每个属性都拥有其特有的值属性名称由类的所有实例共享,“在类中表示对象或实体拥有的特性时称为属性”,计算机学院 赵卓君,方法,“对象执行的操作称为方法。”,计算机学院 赵卓君,类和对象的区别,计算机学院 赵卓君,在Java中定义类和创建对象,类的命名规则:不能为 Java 中的关键字不能包含空格或点号“.”可以下划线“_”、字母或“$”符号开头,class Student

4、String stuName;String stuSex;int stuAge;,计算机学院 赵卓君,类中的方法2-1,Java中的方法相当于C语言的函数语法(,),计算机学院 赵卓君,类中的方法2-2,方法的命名规则:不能为 Java 中的关键字不能包含空格或点号“.”可以下划线“_”、字母或“$”符号开头实例方法可使用圆点符号来访问对象名.方法名例如:obj.method();方法的参数可以是对象,计算机学院 赵卓君,抽象,处理事物复杂性的方法,只关注事物的重要细节,而忽略事物的次要细节。,计算机学院 赵卓君,数据抽象,抽取出事物中的关键数据抽取出事物中的属性和方法,根据具体的应用抽取出类

5、的相关关属性和操作。,计算机学院 赵卓君,数据抽象的示例,计算机学院 赵卓君,封装,信息隐藏,隐藏对象的实现细节,不让用户看到将东西包装在一起,然后以新的完整形式呈现出来例如,两种或多种化学药品组成一个胶囊例如,手机、电脑将方法和属性一起包装到一个单元中,单元以类的形式实现,隐藏属性、方法或实现细节的过程称为封装。,计算机学院 赵卓君,this关键字,用于任何实例方法内,指向当前对象this 的值指向对其调用当前方法的对象 this 关键字可在需要当前类类型的对象引用时使用,计算机学院 赵卓君,构造方法,每当创建一个类的实例时就调用的方法为对象分配内存,初始化实例变量与类同名,但没有返回类型,

6、不使用void两种构造方法参数化构造方法隐式构造方法,计算机学院 赵卓君,垃圾回收,使用new关键字来给对象分配内存。Java自动垃圾回收无用对象占用的内存,无需程序员的干预。程序员可以使用System.gc()来方法建议回收垃圾内存。,计算机学院 赵卓君,包,包允许将类组合成较小的单元(类似文件夹),使其易于找到和使用相应的类文件有助于避免命名冲突。包允许在更广的范围内保护类、数据和方法,可以在包内定义类,而在包外的代码不能访问该类,包将类名空间划分为更加容易管理的块包既是命名机制也是可见度控制机制,计算机学院 赵卓君,继承,计算机学院 赵卓君,继承的优点,计算机学院 赵卓君,子类构造方法,

7、计算机学院 赵卓君,继承小结,父类的构造方法不能被子类继承除了继承父类的成员,子类也可以有自己的成员可以使用super关键字调用父类的构造方法super()方法始终指向调用类的直接父类super()语句必须是子类构造方法的第一句父类构造方法的调用总是先于子类构造方法,计算机学院 赵卓君,多态性,多态性是指“多种形式”它使用不同的实例而执行不同操作多态包括方法重写和方法重载,计算机学院 赵卓君,方法重载 3-1,定义:同一个类中,有两个或多个方法名称相同、参数不同(参数的数据类型不同、或参数的个数相同,或参数的顺序不同),则这些方法重写构成重载,计算机学院 赵卓君,方法重载 3-2,public

8、 class DisplayNumber/*无参数的显示方法*/void display()System.out.println(无参数可显示!);/*带参数的显示方法*/void display(int num,int num1)System.out.println(两个整数是:+num+num1);/*带双精度参数的显示方法*/void display(double count)System.out.println(在 display(double)方法内:+count);,计算机学院 赵卓君,方法重载 3-3,public static void main(String arg)int

9、count=25;DisplayNumber dispObj=new DisplayNumber();dispObj.display();dispObj.display(10,20);/*不存在具有一个 int 型参数的方法,*int 型值自动转化为 double 型值*/System.out.println(调用 display(double)方法,+使用 int 变量:+count);dispObj.display(count);dispObj.display(25.5);,计算机学院 赵卓君,方法重写 3-1,定义:子类中有一个方法和父类的方法名称相同、参数相同(参数的数据类型相同、参数

10、的个数相同)、返回值相同,则子类的这个方法重写父类的方法,计算机学院 赵卓君,方法重写 3-2,父类和子类中具有相同名称和类型的方法,class Rectangle int length;int width;Rectangle()/父类无参构造方法 Rectangle(int len,int wid)length=len;width=wid;void getPerimeter()/*计算矩形的周长.*/System.out.println(矩形的周长为+(2*(length+width);,class Square extends Rectangle Square(int len)length

11、=len;void getPerimeter()/*计算周长.*/System.out.println(正方形的周长为+(4*length);,计算机学院 赵卓君,方法重写 3-3,计算机学院 赵卓君,访问修饰符 3-1,信息隐藏是 OOP 最重要的功能之一,也是使用访问修饰符的原因信息隐藏的原因包括:对任何实现细节不需要关心防止用户意外删除数据,计算机学院 赵卓君,访问修饰符 3-2,计算机学院 赵卓君,访问修饰符 3-3,访问修饰符可访问性,计算机学院 赵卓君,特殊修饰符,计算机学院 赵卓君,static 修饰符 3-1,static修饰符修饰的变量称为静态变量static修饰符修饰的方法

12、称为静态方法静态变量和静态方法不依赖对象而存在,可通过类型打点直接访问,如:类名.静态变量类名.静态方法(),计算机学院 赵卓君,static 修饰符 3-2,计算机学院 赵卓君,public static void main(String arg)/*初始化变量*/double inch=66;double feet=InchesToFeet.convert(inches);System.out.println(inch+英寸为+feet+英尺。);,public static double convert(double in)return(in/inches);,static 修饰符 3-

13、3,静态方法,计算机学院 赵卓君,final 修饰符4-1,final 修饰符可应用于类、方法和变量。final在应用于类、方法和变量时意义是不同的,但本质是一样的:final表示不可改变。声明为final的类不能被继承;声明为final的方法不能被重写;声明为final的的变量为常量;,计算机学院 赵卓君,final 修饰符4-2,final class TestFinal int i=7;int j=1;void f()class Further extends TestFinal,final类不能被继承,声明为final的类不能被继承。final 类示例:,计算机学院 赵卓君,final

14、 修饰符4-3,class TestFinal final void f()class Further extends TestFinal final void f(),final方法不能被覆盖,在方法声明中使用 final 关键字向编译器表明子类不能重写此方法。在声明类中,一个 final 方法只被实现一次。如果一个类为 final 类,那么它的所有方法都为隐式的 final 方法。,计算机学院 赵卓君,final 修饰符4-4,一个变量可以声明为final,这样做的目的是阻止它的内容被修改。声明final变量后,只能被初始化一次,然后就不能对其值进行修改。一个final变量实质上是一个常量

15、。,class FinalDemo public static void main(String args)final int noChange=20;noChange=30;,final变量不能被修改,计算机学院 赵卓君,abstract 修饰符 3-1,由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类,抽象方法必须声明在抽象类中抽象方法语法:abstract type method_name(parameter_list);声明抽象类语法:abstract class 使用:父类中的某些抽象不包含任何逻辑,并需要在子类中重写,子类提供这种抽象方法的实现细节,计算机

16、学院 赵卓君,abstract 修饰符 3-2,抽象类可以具有指向子类对象的对象引用,计算机学院 赵卓君,abstract 修饰符 3-3,抽象方法不具有任何实现代码,abstract class Shape.protected double length;protected double width;.abstract double area();,class Square extends Shape/*构造方法.*param num 传递至构造方法的参数*param num1 传递至构造方法的参数*/Square(final double num,final double num1)sup

17、er(num,num1);/*计算正方形的面积.*return double*/double area()System.out.println(正方形的面积为:);return length*width;,计算机学院 赵卓君,接口,接口就是某个事物对外提供的一些功能的申明 可以利用接口实现多态,同时接口也弥补了Java单一继承的弱点使用interface关键字定义接口一般使用接口声明方法或常量,接口中的方法只能是声明,不能是具体的实现,计算机学院 赵卓君,创建接口的步骤 2-1,/定义方法的接口public interface myinterface public void add(int x

18、,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,编译如下:javac myinterface.java用关键字 implements 实现接口,例如:class demo implements myinterface如果有一个以上接口被实现,则用逗号隔开接口名

19、称,如下所示:class demo implements Mycalc,Mycount,计算机学院 赵卓君,接口使用示例,public class InterfaceTest public static void main(String args)GForce gForce=new Earth();gForce.show();,public class Earth implements GForce public void show()System.out.println(g=+g);,public interface GForce double g=9.8;void show();,计算机学

20、院 赵卓君,Object 类,Java中的每一个类都是从Object类中继承。当类被定义后,如果没有指定继承,那么类的默认是Object。常用方法:clone():克隆(复制对象)equals():比较两个对象的内容是否相等 toString():返回代表该对象的字符串,计算机学院 赵卓君,内部类的概念,可以在一个类中定义另一个类吗?,Java语言可以支持类的嵌套定义,即允许将一个类定义在其它类的内部内部类,思考,计算机学院 赵卓君,内部类的概念,class Outer,class InnerA,class InnerB,外部类,内部类,内部类也属于外部类的一部分,是外部类的成员,可以使用pr

21、ivate,默认,protected和public,static来修饰内部类内部类可分为:成员内部类、局部内部类、匿名内部类、静态内部类。,计算机学院 赵卓君,内部类与外部类的关系,内部类与其所在的外部类之间存在着逻辑上的隶属关系,就像外部类的一个成员。内部类的对象不能单独存在,必须依赖一个外部类的对象内部类中可以直接访问外层类中的成员,包括属性和方法,甚至是private的属性和方法,计算机学院 赵卓君,内部类的分类,内部类可分为以下四种:成员内部类局部内部类匿名内部类静态内部类,计算机学院 赵卓君,成员内部类-1,class Studentclass Birthdayint year;in

22、t month;int day;,在学生类中定义的生日成员内部类,在一个外部类中定义的内部类称为成员内部类,其地位类似于外部类的一个普通成员。,外部类,计算机学院 赵卓君,成员内部类-2,构造成员内部类对象必须先构造外部类的对象,方式二:外部类 外部类对象名=new 外部类();外部类.内部类 对象名=外部类对象名.new 内部类();如:Student s2=new Student();Student.Birthday birth2=s2.new Birthday(1988,8,17);,方式一:外部类.内部类 内部类对象名=new 外部类().new 内部类();如:Student.Bir

23、thday birth1=new Student().new Birthday(1990,10,12);,计算机学院 赵卓君,局部内部类-1,在一个外部类中的方法里定义的内部类称为局部内部类,类似于外部类方法中的一个局部变量。因此,局部内部类具有以下特点:局部内部类的作用域仅限于其所在方法体或语句块。局部内部类不允许在其前添加private,protected 或public等访问修饰符局部内部类中也不允许定义static属性和方法用于隐藏实现细节最大限度降低了命名的冲突不推荐使用,计算机学院 赵卓君,局部内部类-2,class Studentvoid printInfo()System.ou

24、t.println(姓名:+name);System.out.println(性别:+sex);birth.printBirth();class CalcAgeint calc(int thisYear)return thisYear-birth.year;CalcAge ca=new CalcAge();System.out.println(年龄:+ca.calc(2010);,在学生类方法中定义的局部内部类,用于计算年龄,计算机学院 赵卓君,匿名内部类-1,如果只创建一个类的对象,则该类的名称都可省略,称为匿名内部类,是局部内部类的一个特例或简化匿名类可以继承一个普通的父类,也可以继承一个

25、抽象类。匿名类甚至可以实现一个接口,但不允许实现多个接口。且实现接口时就不能再继承父类了,反之亦然。匿名类的使用目的是为了简洁,如果结构过于复杂会导致代码混乱。此时,可用局部内部类代替。,匿名类定义的语法:父类名|接口名 匿名类对象名=new(参数列表);,计算机学院 赵卓君,匿名内部类-2,public static void main(String args)Person sp=new Person(李红,21)/重写抽象父类Person类的抽象方法public void work()System.out.println(个人信息:);this.printInfo();System.out

26、.println(我是一个java程序开发人员);sp.work();,匿名类,继承Person类,匿名类对象,父类,计算机学院 赵卓君,静态内部类-1,静态内部类和外部类中其他的静态成员类似静态内部类的对象可以不依赖外部类的对象而存在,可以直接创建,如:,外部类.静态内部类 对象名=new 外部类.静态内部类();如:Student.Birthday birth1=new Student.Birthday(1990,10,12);,静态内部类中无法直接使用外部类的非static成员只有外部类或静态内部类中才可以定义static成员。,计算机学院 赵卓君,静态内部类-2,/外部类class O

27、uter/静态内部类static class Innervoid method1()System.out.println(静态内部类中的普通方法);static void method2()System.out.println(静态内部类中的静态方法);,静态内部类,计算机学院 赵卓君,使用内部类的理由,使得代码更加简洁、优雅,如:事件监听器的匿名类。可以使得类和类的成员级别一样拥有访问权限,如:成员内部类。可以使得类和局部变量的级别一样,如:局部内部类。完成单独任务的特殊类,于正在设计的类有密切联系。,计算机学院 赵卓君,内部类小结-1,成员内部类可以访问外部类的属性和方法。外部类不可以直接

28、访问成员内部类的属性和方法,只能通过成员内部类的对象才能访问成员内部类的属性和方法。局部内部类可以访问外部类的属性和方法,还可以访问其所在方法的局部变量,但这些局部变量必须是final的。匿名类可以访问其父类的成员,但只有一个对象静态内部类只能访问外部类的静态成员。,计算机学院 赵卓君,内部类小结-2,计算机学院 赵卓君,要表示一周中的每一天,用整型变量的7种不同的一个取值来表示吗?变量取值范围过大!怎么办?,用7个常量来表示吗?太麻烦了啦!怎么办?,变量取值范围过大的问题,思考,计算机学院 赵卓君,枚举,JDK1.5版本才引入的新的引用数据结构,使用一组常量值来表示特定的数据集合。定义枚举的

29、关键字是enum,语法:public enum 枚举名称常量值1,常量值2,常量值3,例如:public enum WeekdaysMon,Tue,Wed,Thu,Fri,Sat,Sun,计算机学院 赵卓君,枚举的使用规则,枚举类型允许象常规类一样有属性和方法,甚至可以有构造方法,构造方法还可以重载。不能直接调用枚举的构造方法,而是通过枚举常量后面定义的参数自动来调用构造方法。不能实例化枚举对象每个枚举都有一个静态方法values(),可以以声明枚举值时的顺序返回这些值的一个数组。可以在类外、类内定义枚举,但是不能在方法里定义枚举。,计算机学院 赵卓君,总结-1,对象由状态(属性)和行为(方法

30、)组成 类是具有相同属性和行为的一组对象的集合 类的变量和方法可被该类的实例访问圆点符号用于访问对象的成员构造函数在创建对象时初始化对象封装、继承和多态是面向对象的主要特征继承可提高代码的重用性,使用extends关键字来实现。除了构造方法之外,父类的所有方法和属性都被子类的对象继承多态性是不同的实例对象以不同的方式对相同的信息作出不同的表现,计算机学院 赵卓君,总结-2,四种访问修饰符:public,protected,默认,privateJava 常用修饰符有 static、final、abstract接口是Java编程一项重要的技术,同过它可以实现多态,同时它也弥补了Java单一继承的不

31、足Object类是所有的类的父类内部类隶属于外部类,可以使用private、默认、protected、public和static来修饰内部类内部类分为:成员内部类、局部内部类、匿名内部类和静态内部类。成员内部类可以访问外部类的属性和方法。,计算机学院 赵卓君,总结-3,外部类只能通过成员内部类的对象才能访问成员内部类的属性和方法。局部内部类可以访问外部类的属性和方法,还可以访问其所在方法的局部变量,但这些局部变量必须是final的。匿名类可以访问其父类的成员,但只有一个对象静态内部类只能访问外部类的静态成员。枚举是使用一组常量值来表示特定的数据集合。定义枚举的关键字是enum。不能直接调用枚举的构造方法,也不能在方法里定义枚举类型。,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号