第五讲 面向对象之类与对象 - 封装与继承
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int length, width, height, area, volume; void setValue(int x,int y, int z ) { length=x; width=y; height=z; } void getArea( ) { area = 2*(length*width+length*height+width*height); } void getVolume( ) { volume = length*width*height; } void print( ) { printf(“area=%d,volume=%d”, area,volume); }
面向对象之封装与继承
本章主要内容
1、构造方法及构造方法的重载 2、访问控制
重难点
1、this指针 2、深浅拷贝 3、包的概念
练一练: 例1:设计一个电子日历类,要求可以显示当前日期,可以设定当前日期, 可以计算出 昨天和明天的日期。 例2:设计一个箱子类,要求可以设定箱子的长宽高,可以计算出它的表面积,可以 计算出他的体积。
Java包详细介绍 1、java.lang包:java的核心类库,包含了运行java程序必不可少的系统类,如基本数据类型、基本数学函数、字符 串处理、线程、异常处理类等,系统缺省加载这个包 2、java.io包:java语言的标准输入/输出类库,如基本输入/输出流、文件输入/输出、过滤输入/输出流等等 假如要求用java实现一个400*300大小的窗口,并显示出来,如何实现? 3、java.util包:包含如处理时间的date类,处理变成数组的Vector类,以及stack和HashTable类 4、java.awt包:构建图形用户界面(GUI)的类库,低级绘图操作Graphics类,图形界面组件和布局管理如Checkbox 有这样一个类JFrame(窗口类)已经定义好了,它有下面这样一些方法: 类、Container类、LayoutManger接口等,以及界面用户交互控制和事件响应,如Event类 5、java.awt.image包:处理和操纵来自于网上的图片的java工具类库 1、setSize(int x, int y);//功能是设置一个x*y大小的窗口 6、java.wat.peer包:很少在程序中直接用到,使得同一个java程序在不同的软硬件平台上运行 2、setLocation(int x, int y);//功能是设置窗口在屏幕显示的坐标 7、java.applet包:是创建小应用程序 APPLET的必须包 3、setVisible(boolean f);//功能是设置窗口是否可见 8、java.net包:实现网络功能的类库有Socket类、ServerSocket类 …… 9、java.corba包和java.corba.orb包:这两个包将CORBA(common object request broker architecture,是一种标准 化接口体系)嵌入到Java环境中,使得Java程序可以存取、调用CORBA对象,并与CORBA对象共同工作。这样, Jdk7提供了大概3000多个功能强大的类(类库,类仓库),我们只要知道类的名称,所 Java程序就可以方便、动态地利用已经存在的由Java或其它面向对象语言开发的部件,简化软件的开发。 10、java.lang.reflect包:提供用于反射对象的工具 在的位置,提供哪些方法和属性,就可以方便地利用他们实现快速开发。为了更好地组 11、java.util.zip包:实现文件压缩功能 织和管理这些类,jdk采用包(200多个)的方式来组织,一般会将类似功能的类放到一 12、java.awt.datatransfer包:处理数据传输的工具类,包括剪贴板,字符串发送器等 个包里边,在使用这些类的时候,用import关键字将类所在的包名导入程序即可。 13、java.awt.event包 :GUI事件处理包。 14、java.sql包:实现JDBC的类库 15、java.rmi :提供远程连接与载入的支持。 16、java.security :提供安全性方面的有关支持。
public class MainClass { public static void main(String args[ ] ) { Box b; b = new Box( ); b.setValue( 3,4,5); b.getArea( ); b.getVolume( ); b.print( ); } }
public class MainClass { public static void main(String args[ ] ) { MyDate today; today = new MyDate( ); today.setDate( 2012,9,20); today.getTomorrow( ); today.getYestoday( ); today.print( ); } }
class Box {
int length, width, height, area, volume; void setValue(int x,zint y, int z ) Box(int x, int y, int ) { { length=x; width=y; height=z; length=x; width=y; height=z; } } Box(int x, int y ) { length=x; width=y; } Box(Box another ) { length=another.length; width=another.width; height=another.height; } 构造方法的重载
public class MainClass { public static void main(String args[ ] ) { Box b; b = new Box( ); b.setValue( 3,4,5); b.getArea( ); b.getVolume( ); b.print( ); } }
练一练: 设计一个电子日历类,要求可以显示当前日期,可以设定当前日期, 可以计算出昨天 和明天的日期。其中设定日期用构造方法实现,初始化的情况有三种:1、使年月日 都为0;2、使年份为2012,月和日为0;3、可使用一个日历类对象初始化一个新对象。
this指针和instanceof对象运算符 1、this指针 class Box { int length, width, height, area, volume; Box(int length, int width, int height ) { this.length=length; this.width=width; this.height=height ; length=length; width=width; height=height ; ? } … }
}
构造方法总结一下: 定义:创建对象时,通常首先要为对象的数据成员赋初始值.初始化是最常用的操作 之一,为简化这一操作,Java系统提供了专用的方法——构造方法来完成这一操作。 它的有下面几种特殊性: 1、构造方法的方法名与类名相同。 2、构造方法是类的方法,它能够简化对象数据成员的初始化操作。 3、不能对构造方法指定类型,它有隐含的返回值,该值由系统内部使用。 4、构造方法一般不能由编程人员显式地直接调用,在创建一个类的对象的同时,系 统会自动调用该类的构造方法将新对象初始化。 5、如果用户在一个自定义类中未定义该类的构造方法,系统将为这个类定义一个缺 省的空构造方法。这个空构造方法没有形式参数,也没有任何具体语句,不能完成任 何操作。但在创建一个类的新对象时,系统要调用该类的构造方法将新对象初始化。 6、构造方法可以重载,即可定义多个具有不同参数的构造方法。 7、构造方法可以继承,即子类可以继承父类的构造方法。
void main( ) { setValue( 3,4,5); getArea( ); getVolume( ); print( ); }
Biblioteka Baidu
class Box {
int length, width, height, area, volume; void setValue(int x, int y, int z ) { length=x; width=y; height=z; } void getArea( ) { area = 2*(length*width+length*height+width*height); } void getVolume( ) { volume = length*width*height; } void print( ) { Sys…(“area=%d,volume=%d”, area,volume); }
关于对象的创建与拷贝: 对于简单数据变量,声明的同时计算机就为其分配一定大小的内存空间。 int a, b; //a,b拥有各自的空间 float c; 对于对象(类的变量),声明时计算机没有为其分配内存空间,需要通过new关键字申请 空间。 问题2:如果让b3独自有一片内存空间,且 Box b1,b2; 内容和b1一样呢? b1=new Box( ); b1 b2 length length b2=new Box( ); height height width width 问题1:如果有 b3 setBox( ) setBox( ) Box b3; getArea( ) getArea( ) b3=b1; getVolume( ) getVolume( ) b3是另一片内存空间,还是和b1 print( ) print( ) 共用一片内存空间,如何证明你 的想法?
构造方法!方法名同类名且没有返回值类型。 class Box public class MainClass { { int length, width, height, area, volume; public static void main(String args[ ] ) void setValue(intint z ) y, int z ) x, int Box(int x, int y, { {{ Box b; length=x; width=y; height=z; length=x; width=y; height=z; b = new Box( ); b = new Box(3,4,5); }} b.setValue( 3,4,5); void getArea( ) b.getArea( ); { b.getVolume( ); area = 2*(length*width+length*height+width*height); b.print( ); } } void getVolume( ) } { volume = length*width*height; } void print( ) { Sys…(“area=%d,volume=%d”, area,volume); } }
}
class MyDate {
}
int year, month, day; void setDate(int x, int y, int z ){…} void print( ){…} void getTomorrow( ){…} void getYestoday( ){…}
public class MainClass { public static void main(String args[ ] ) { MyDate today; today = new MyDate( ); today.setDate( 2012,9,20); today.getTomorrow( ); today.getYestoday( ); today.print( ); } }