




已阅读5页,还剩68页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章 类、对象和接口 4.2 对象 类是创建对象的模板 创建对象: 对象的声明 为对象分配内存 4.2 对象 1、对象的声明: 格式:类的名字 对象名字; 如:People zhangPing; 4.2 对象 2、为声明的对象分配内存: 使用new运算符和类的构造方法为声明的对象分 配内存,如果类中没有构造方法,系统会调用默 认的构造方法(默认的构造方法是无参数的)。 如:zhangPing=new People(); 4.2 对象 class XiyoujiRenwu float height,weight; String head,ear,hand,foot,mouth; void speak(String s) System.out.println(s); class A public static void main(String args ) XiyoujiRenwu zhubajie; /声明对象 zhubajie=new XiyoujiRenwu(); /为对象分配内存,使用new运算符和默认的构造方法 例:1 4.2 对象 class Point int x,y; Point(int a,int b) x=a; y=b; public class A public static void main(String args) Point p1,p2; /声明对象p1和p2。 p1=new Point(10,10); /为对象分配内存,使用 new 和类中的构造方法。 p2=new Point(23,35); /为对象分配内存,使用 new 和类中的构造方法。 例:2 练习 用课本P45 类梯形创建一个名为“tx”的对 象 4.2 对象 3、对象的内存模型: 声明对象时的内存模型 声明对象变量后,变量内存无数据,是空对象,不能 使用 如:XiyoujiRenwu zhubajie; zhubajie 4.2 对象 3、对象的内存模型: 对象分配内存后的内存模型 为成员变量分配内存 返回一个应用给对象变量 如 zhubajie=new XiyoujiRenwu(); 0.0 0.0 null null null null null 0xAB12 zhubajie weight height head ear mouth hand foot 4.2.2 使用对象 使用运算符 “.” ,对象实现对自己的变量访问和 方法的调用 对象操作自己的变量(对象的属性) 对象创建后,就有自己的变量。通过使用运算符“.”对象 实现对自己变量的访问。 对象调用类中的方法(对象的功能) 采用“.”调用创建它的类中的方法。 当对象调用类中的一个方法时,方法中的局部变量被 分配到内存空间 4.2.2 使用对象 class XiyoujiRenwu float height,weight; String head, ear,hand,foot,mouth; void speak(String s) head=“歪着头“; System.out.println(s); public class Example public static void main(String args) XiyoujiRenwu zhubajie,sunwukong;/声明对象。 zhubajie=new XiyoujiRenwu();/为对象分配内存,使用new 运算符和默认构造方法。 sunwukong=new XiyoujiRenwu(); zhubajie.height=1.80f; /对象给自己的变量赋值。 zhubajie.weight=160f; zhubajie.hand=“两只黑手“; zhubajie.foot=“两只大脚“; zhubajie.head=“大头“; zhubajie.ear=“一双大耳朵“; zhubajie.mouth=“一只大嘴“; sunwukong.height=1.62f; /对象给自己的变量赋值。 sunwukong.weight=1000f; sunwukong.hand=“白嫩小手“; sunwukong.foot=“两只绣脚“; sunwukong.head=“绣发飘飘“; sunwukong.ear=“一对小耳“; sunwukong.mouth=“樱桃小嘴“; System.out.println(“zhubajie的身高:“+zhubajie.height); System.out.println(“zhubajie的头:“+zhubajie.head); System.out.println(“sunwukong的重量:“+sunwukong.weight); System.out.println(“sunwukong的头:“+sunwukong.head); zhubajie.speak(“俺老猪我想娶媳妇“); /对象调用方法。 System.out.println(“zhubajie现在的头:“+zhubajie.head); sunwukong.speak(“老孙我重1000斤,我想骗八戒背我“); /对象调用方法。 System.out.println(“sunwukong现在的头:“+sunwukong.head); 4.2.2 使用对象 类中的方法可以操作成员变量,当对象调用该 方法时,方法中出现的成员变量就是指该对 象的成员变量。 练习 打印梯形的面积:(上底为2.0,下底为 5.0,高为3.0) 用课本P45 梯形类 4.2.3 对象的应用和实体 当用类创建一个对象时,类中的成员变量被分 配内存空间,这些内存空间被称作该对象的 实体。 对象中存放着应用,确保实体由该对象操作使 用。 4.2.3 对象的应用和实体 如: Point p1=new Point(12,16); Point p2=new Point(6,18); p1=p2; 12 16 6 18 0xAB280xDD 6 18 X y X y X y 0xDD 0xDD p1 p2 p2p1 4.2.3 对象的应用和实体 例4: class 圆 double 半径; 圆(double r) 半径=r; double 计算面积() return 3.14*半径*半径; void 修改半径(double 新半径) 半径=新半径; double 获取半径() return 半径; 4.2.3 对象的应用和实体 class 圆锥 圆 底圆; double 高; 圆锥(圆 circle,double h) this.底圆=circle; this.高=h; double 计算体积() double volume; volume=底圆.计算面积()*高/3.0; return volume; void 修改底圆半径(double r) 底圆.修改半径(r); double 获取底圆半径() return 底圆.获取半径(); 4.2.3 对象的应用和实体 class Example public static void main(String args) 圆 circle=new 圆(10); 圆锥 circular=new 圆锥(circle,20); System.out.println(“圆锥底圆半径:“+circular.获取底圆半径(); System.out.println(“圆锥的体积:“+circular.计算体积(); circular.修改底圆半径(100); System.out.println(“圆锥底圆半径:“+circular.获取底圆半径(); System.out.println(“圆锥的体积:“+circular.计算体积(); 4.3 static关键字 1、实例变量和类变量的区别 不同对象的实例变量将被分配不同的内存空间 ,如果类中的成员变量有类变量,那么所有 对象的这个类变量都分配给相同的一处内存 ,改变其中一个对象的这个类变量会影响其 它对象的这个类变量。 也就是说对象共享类变量 4.3 static关键字 例子5 class 梯形 float 上底,高; static float 下底; /类变量。 梯形(float 上底,float 高) this.上底=上底; this.高=高; float 获取上底() return 上底; float 获取下底() return 下底; 4.3 static关键字 class Example4_5 public static void main(String args) 梯形 laderOne,laderTwo; /梯形的字节码被加载到内存。 梯形.下底=60; /通过类名操作类变量。 laderOne=new 梯形(18.0f,20); laderTwo=new 梯形(9.0f,10); System.out.println(“laderOne的上底:“+laderOne.获取上底(); System.out.println(“laderOne的下底:“+laderOne.获取下底(); System.out.println(“laderTwo的上底:“+laderTwo.获取上底(); System.out.println(“laderTwo的下底:“+laderTwo.获取下底(); 4.3 static关键字 2、实例方法和类方法的区别 当类的字节码文件被加载到内存时,类的实例 方法不会被分配入口地址,当该类创建对象 后,类中的实例方法才分配入口地址,从而 实例方法可以被类创建的任何对象调用执行 。 类中的类方法,在该类被加载到内存时,就分 配了相应的入口地址。 4.4 this关键字 1、this关键字可以出现在类的实例方法中,代 表使用该方法的当前对象。 2、this关键字出现在类的构造方法中,代表使 用该构造方法所创建的对象。 实例方法可以操作类的成员变量。 格式:this.成员变量 4.4 this关键字 如: class A int x; void f() this.x=100; /此例子没有同名的成员变量和局部变量,this可以省略 4.4 this关键字 如: class B void f() this.g(); void g() System.out.println(“OK”); /此例子中this代表使用方法f的当前对象,方法发f的方法体中this.g()就是 当前对象调用方法g. 一个方法调用另一个方法时可以省略方法名字前面的this 4.5 包 1、包语句 通过关键字package声明包语句。package作 为Java源文件的第一条语句。 package语句的一般格式: package 包名; 如: package sunrise; package ; 4.5 包 如果源程序中省略了package语句,源文件所 定义命名的类被隐含地认为是无名包的一部 分即源文件中定义命名的类在同一个包 中,但该包没有名字。 4.5 包 程序如果使用了包语句,就必须有相应的目录 结构。 如: package tom.jafei; 则目录结构必须包含如下结构: tomjiafei 4.5 包 例6: package tom.jiafei; public class Example4_6 public static void main(String args) System.out.println(“我有包名“); 4.5 包 2、 import语句 使用import语句可以引入包中的类。 在一个java源程序中可以有多个import语句, 他们必须写在package语句和源文件中的类 的定义之间 4.5 包 2、 import语句 Java提供的包有很多,约130多个 如: java. applet 包含所有实现java applet的类 java.awt 包含抽象窗口工具集中的图形、文本、窗口GUI类 java.awt.image 包含抽象窗口工具集中的图像处理 类 java.lang 包含所有基本语言类 java.io 包含所有的输入/输出类 包含所有实现网络功能的类 java.until包含有用的数据类型类 4.5 包 引入类: 如果要引入一个包中的全部类,则可以用星 号来代替 如:import java.awt.*; 只引入一个确定的类,则直接写明引用 如:import java.until.Date 4.5 包 例7: import java.applet.Applet; import java.awt.*; public class Example extends Applet Button redbutton; public void init() redbutton=new Button(“我是一个红色的按钮“); redbutton.setBackground(Color.red); add(redbutton); public void paint(Graphics g) g.drawString(“it is a button“,30,50); 例8 import tom.jiafei.*; class Example4_8 public static void main(String args) Trangle trangle=new Trangle(12,3,1); trangle.计算面积(); trangle.修改三边(3,4,5); trangle.计算面积(); 4.6 访问权限 1.私有变量和私有方法 2.共有变量和共有方法 3.友好变量和友好方法 4.受保护成员变量和方法 5.public类与友好类 4.6 访问权限 1.私有变量和私有方法 用关键字private修饰的成员变量和方法被称 为私有变量和私有方法 如: class Tom private float weight; /weight私有的float变量 private float f(float a, float b) /方法f是私有方法 4.6 访问权限 对于私有成员变量或方法,在另外一个类中,不能操 作这个私有变量或方法,只有在本类中创建该类的 对象的时候,才能访问自己的私有变量和类中的私 有方法。 class Jerry void g() Tom cat=new Tom(); cat.weight=23f; /非法 cat.f(3f,4f);/非法 4.6 访问权限 class Example4_9 private int money; Example4_9() money=2000; private int getMoney() return money; public static void main(String args) Example4_9 exa=new Example4_9(); exa.money=3000; int m=exa.getMoney(); System.out.println(“money=“+m); 类中访 问自己 的私有 成员变 量和私 有方法 4.6 访问权限 2.共有变量和共有方法 用关键字public修饰的成员变量和方法被称 为共有变量和共有方法 如: class Tom public float weight; /weight共有的float变量 public float f(float a, float b) /方法f是共有方法 4.6 访问权限 对于共有成员变量或方法,在另外一个类中, 能操作这个变量或方法。 class Jerry void g() Tom cat=new Tom(); cat.weight=23f; /合法 cat.f(3f,4f);/合法 4.6 访问权限 3.友好变量和方法 不用private、public、protected修饰的成员 变量和方法被称为友好变量和友好方法。 如: class Tom float weight; /weight友好的float变量 float f(float a, float b) /方法f是友好方法 4.6 访问权限 在同一个包中,那么能访问自己的友好变量和 友好方法。 class Jerry void g() Tom cat=new Tom(); cat.weight=23f; /合法 cat.f(3f,4f);/合法 4.6 访问权限 4.受保护的成员变量和方法 用关键字protected修饰的成员变量和方法被 称为受保护的成员变量和受保护的方法 如: class Tom protected float weight; /weight受保护的float变量 protected float f(float a, float b) /方法f是受保护的方法 4.6 访问权限 当在另外一个类中用类Tom创建一个对象后,如果这 个类与类Tom在同一个包中,那么该对象能访问自 己的protected变量和方法.也可以通过类名访问 class Jerry void g() Tom cat=new Tom(); cat.weight=23f; /合法 cat.f(3f,4f);/合法 4.6 访问权限 5.public类与友好类 类声明时,如果在关键字class前面加上public关 键字,就称这样类是一个public类 如: public class A 如果一个类不加public修饰,则为友好类 如:class A 4.6 访问权限 5.public类与友好类 不能用protected和private修饰类 访问权限的排列: public 、protected、友好的、private 4.7 类的继承 继承是一种用已有类创建新类的机制。 新类继承一般类的状态和行为,并根据需要增 加它自己的新的状态和行为。 由继承而得到的类成为子类,被继承的类称为 父类(超类)。 Java不支持多重继承(子类只能有一个父类) 4.7 类的继承 1.创建子类 在声明中,使用关键字extends来创建一个类 的子类,格式: class 子类名 extends 父类名 4.7 类的继承 1.创建子类 例: 把Student声明为People的子类,People是 Students的父类. class Student extends People 4.7 类的继承 2.子类的继承性 子类继承父类的成员变量 继承父类的方法. 4.7 类的继承 2.子类的继承性 子类和父类在同一包种的继承性 如果子类和父类在同一个包中,那么子类自然地继 承了其父类中不是private的成员变量作为自己 的成员变量,并且也自然地继承了父类中不是 private的方法作为自己的方法.继承的成员或方 法的访问权限保持不变. class Father private int money; int weight=100; String speak(String s) return s ; class Son extends Father String hand ; void f() weight=200; System.out.println(weight); class Suizi extends Son String foot ; public class Example4_10 public static void main(String args) Son son=new Son(); Suizi sunzi=new Suizi(); son.hand=“两只手 “; sunzi.hand=“两小只手 “; sunzi.foot=“两只脚 “; System.out.println(son.hand); son.f(); System.out.println(sunzi.weight+“:“+sunzi.hand+“:“+sunzi.foot); System.out.println(sunzi.speak(“我是孙子“); 4.7 类的继承 2.子类的继承性 子类和父类不在同一包种的继承性 如果子类和父类不在同一个包中,那么子类继承了 父类的protected、public成员变量作为子类的成 员变量,并且继承了父类的protected、public方 法为子类的方法。继承的成员或方法的访问权限 保持不变. 如果子类和父类不在同一个包里,子类不能继承 父类的友好变量和友好方法。 Father.java: package tom.jiafei; public class Father int height; protected int money=120; public int weight; protected int getMoney() return money; void setMoney(int newMoney) money=newMoney; Jerry.java package ; import tom.jiafei.Father; public class Jerry extends Father /Jerry和Father在不同的包中. void f() money=1000; /合法, /height=1.89f; /非法,因为Jerry没有继承友好的height System.out.println(money); /输出结果是1000。 /setMoney(300); /非法,因为Jerry没有继承友好的方法setMoney。 int number=getMoney(); /合法. System.out.println(number); /输出结果是1000。 public static void main(String args) Jerry jerry=new Jerry(); jerry.f(); 4.7 类的继承 2.子类的继承性 protected的进一步说明 一个类A中的protected成员变量和方法可以被它的直接子 类和间接子类继承,如:B是A的子类,C是B的子类,D 又是C的子类,那么B、C和D类都继承了A的protected 成员变量和方法。 如果用D类在D本身中创建了一个对象,那么该对象总是 可以通过“.”运算符访问继承的或自己定义的protected变 量和protected方法。 如果在另外一个类中,比如Other类,用D类创建了一个对 象object,该对象通过“.”运算符访问protected变量和 protected方法的权限如下: 4.7 类的继承 如果在另外一个类中,比如Other类,用D类创建了一个对 象object,该对象通过“.”运算符访问protected变量和 protected方法的权限如下: 子类D中亲自声明的protected成员变量和方法,不可能 是从别的类继承来的,object访问这些非继承的 protected成员变量和方法时,只要Other类和D类在同一 个包中就可以 如果子类D的对象的protected成员变量或protected方法 是从父类继承的,那么就要一直追溯到该protected成员 变量或方法的“祖先”类,即A类。如果Other类和A类在同 一个包,object对象能访问继承的protected变量和 protected方法。 A.java: package tom.jiafei; public class A protected int x=120; protected void fA() System.out.println(“我是A类中的protected方 法“); System.out.println(“x=“+x); B.java: package ; import tom.jiafei.A; public class B extends A protected void fB() System.out.println(“我是B类中自己定义的方法“); public static void main(String args) B b=new B(); /对象b在B类中. b.x=1000; /合法. b.fA(); /合法. b.fB(); /合法. DL.java package ; import .B; public class DL public static void main(String args) B b=new B(); /对象b在DL类中. b.x=1000; /非法,因为对象b的成员变量x是从A类继承的,但DL和A不在同一包中. b.fA(); /非法.因为方法fA是B类从A类继承的protected方法,但DL和A不在同一包 中. b.fB(); /合法,因为方法fB是B类中自己定义的protected方法, DL类和B类在同一包中. Example.java package tom.jiafei; import .B; public class Example public static void main(String args) B b=new B(); /对象b在Example类中. b.x=1000; /合法,因为对象b的成员变量x是从A类继承的,而Example和A在 同一包中. b.fA(); /合法.因为方法fA是B类从A类继承的protected方法,而Example和A在同一包中. b.fB(); /非法,因为方法fB是B类中自己定义的protected方法,但 Example类和B类不在同一包中. a 4.7 类的继承 3.成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三体公开课课件
- 在校大学生实习个人求职信
- 小儿疾病课件
- 小儿正常子宫超声课件
- 出口公司转让合同协议书
- 设计服务合同协议模板模板
- 购买新房物业合同范本模板
- 与快递公司签订合同协议
- 二手旧模具买卖合同协议
- 写字楼保洁居间合同协议
- 食材配送服务方案投标方案(技术标)
- DB43-T 140-2023 造林技术规程
- 过敏性休克病例讨论
- 提高肋骨骨折影像学诊断
- GB 30616-2020食品安全国家标准食品用香精
- GA/T 1343-2016防暴升降式阻车路障
- (推荐下载)家族性结肠息肉病教学课件
- 《材料成型装备及自动化》课程大纲
- 公文写作高频词库
- 临时用电JSA分析表
- DB33-T1217-2020《屋面工程质量验收检查用表标准》
评论
0/150
提交评论