欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    一章类与对象的基本概念.ppt

    • 资源ID:5634715       资源大小:712.04KB        全文页数:133页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    一章类与对象的基本概念.ppt

    JavaEE基础教程,第4章类与对象的基本概念,4.1类与对象的概念,4.2 类的访问权限与包的概念,Java EE基础教程,2,2023年8月4日星期五,4.1类与对象的概念,返回,类是实现Java面向对象程序设计的基础,是对基本数据类型的扩充。类封装了对象的行为和属性,它是具有相同特征的同类对象的抽象模型(temp1ate),利用这个抽象模型可以构造具体的实例对象(instance)。,Java EE基础教程,3,2023年8月4日星期五,对象是Java程序中最核心、最基础的部分。对象在现实生活中是很普通的概念。所有的物体都可以被视为对象,大到宇宙,小到原子,都可以将其看作是对象。我们时常与对象在打交道,我们用的钢笔、骑的自行车、乘的公交车等。而我们经常见到的卡车、公交车、小轿车等都会涉及以下几个重要的物理量:可乘载的人数、运行速度、发动机的排量、耗油量、自重、轮子数目等。另外,还有加速、减速、刹车、转弯、播放音乐等几个重要的功能,这些功能称作是他们具有的方法。一个对象具有本身的属性即特征,这些特征决定对象的状态,对象还可通过自己的行为,不断改变自己的状态。,Java EE基础教程,4,2023年8月4日星期五,类与对象的关系犹如图纸与零件关系,先有图纸后有零件,图纸描述了零件的共同特征,零件是按图纸制造出来的。在程序中只能有类的一个定义,但该类可以有多个实例对象。在Java编程语言中使用new运算符实例化对象。要学习 Java 编程就必须首先学会怎样去写类,即怎样用 Java 的语法去描述对象共有的属性和功能。属性通过变量来刻画,功能通过方法来体现。类把属性和对属性的操作封装成一个整体。Java程序设计就是从类的设计开始的。基于对象的编程更加符合人的思维模式,编写的程序更加健壮和强大。更重要的是,面向对象编程鼓励创造性的程序设计。,Java EE基础教程,5,2023年8月4日星期五,4.1.1类的声明类由关键词calss来定义。一个类的定义包括两个部分:类声明和类体。类体的内容由两部分构成,一部分是变量的定义,用来刻画属性;另一部分是方法的定义,用来描述功能。,Java EE基础教程,6,2023年8月4日星期五,类的定义的基本格式为:publicabstract|final class className extends superclassName implements interfaceNameListpublic|protected|private static final transient volatile type variableName;/成员变量public|protected|private static final|abstract native synchronized returnType methodName(paramList)throws exceptionList statements/成员方法其中,修饰符public、abstract、final说明了类的属性,className为类名,superclassName为类的父类的名字,interfaceNameList为类所实现的接口列表。,Java EE基础教程,7,2023年8月4日星期五,1类的成员变量在类中声明的变量就是成员变量,作用域是整个类。类的成员变量分为类成员变量和实例成员变量。类的成员变量的声明方式如下:public|protected|private static final transient volatile type variableName;其中:public:公有变量。protected:保护变量。private:私有变量。static:静态变量(类成员变量),相对于实例成员变量。final:常量。transient:暂时性变量,用于对象存档。volatile:贡献变量,用于并发线程的共享。,Java EE基础教程,8,2023年8月4日星期五,2类的成员方法成员方法描述对象所具有的功能或操作,反映对象的行为,是具有某种相对独立功能的程序模块。一个类或对象可以有多个成员方法,对象通过执行它的成员方法对传来的消息作出响应,完成特定的功能。成员方法一旦定义,便可在不同的场合中多次调用,故可增强程序结构的清晰度,提高编程效率。成员方法的结构包括两部分内容:方法声明和方法体。方法声明包括方法名、返回类型和外部参数。其中参数的类型可以是简单数据类型,也可以是引用数据类型。,Java EE基础教程,9,2023年8月4日星期五,成员方法的定义方式如下:public|protected|private staticfinal|abstract native synchronizedreturnType methodName(paramList)throws exceptionList statements,Java EE基础教程,10,2023年8月4日星期五,方法声明中的限定词的含义:public:公共访问控制符。private:私有访问控制符。protected:保护访问控制符。static:类方法,可通过类名直接调用。abstract:抽象成员方法,没有方法体。final:方法不能被重写。native:本地成员方法修饰符,集成其它语言的代码。synchronized:控制多个并发线程的访问。,Java EE基础教程,11,2023年8月4日星期五,下面是一个类名为“梯形”的类,类体内容的变量定义部分定义了 4 个 float 类型的变量“上底”,“下底”,“高”和“laderArea”。方法定义部分定义了两个方法“计算面积()”和“修改高()”。class 梯形 float 上底,下底,高,laderArea;float 计算面积()laderArea=(上底+下底)*高/2.0f;return laderArea;void 修改高(float h)高=h;类体变量定义部分所定义的变量被称为类的成员变量。在方法体中定义的变量和方法的参数被称为局部变量。成员变量和局部变量的类型可以是Java中的任何一种数据类型,包括基本类型整型、浮点型、字符型、引用类型。,Java EE基础教程,12,2023年8月4日星期五,成员变量在整个类内都有效,局部变量只在定义它的方法内有效。例如:class LocalVariable int distance;int find()int a=12;distance=a;/合法,distance在整个类内有效。return distance;void gety()int y;y=a;/非法,a是局部变量,这里无法访问,Java EE基础教程,13,2023年8月4日星期五,例4-1 创建一个类,该类含有类的成员变量和成员方法,并对所创建的类进行测试。程序清单:ch04Text1.javaclass Text1 static int a;/当被定义为static类型时,为类变量,可被对象或类调用 int b;/实例对象变量,只能被对象调用 public void display(int a,int b)/成员方法 System.out.println(static int a=+a);System.out.println(int b=+b);public static void display(int b)/类方法,可通过类名直接调用System.out.println(static display:int b=+b);,Java EE基础教程,14,2023年8月4日星期五,public static void main(String args)Text1 tt=new Text1();/创建实例对象ttt t.display(5,6);/不可以Text1.display(5,6);因为对象变量或对象方法只能被对象tt调用 Text1.display(0);/当被定义为static类型时,为类方法,可被对象或类调用 tt.display(23);tt.a=9;Text1.a=24;tt.b=3;tt.display(a,15);,Java EE基础教程,15,2023年8月4日星期五,例4-2 创建一个类,该类含有判断质数的成员方法,测试时从键盘输入一个数,判断是否为质数。读键盘采用Scanner类的nextInt()方法。程序清单:ch04PrimeNumber.javaimport java.util.Scanner;public class PrimeNumber/*用(int)Math.sqrt(n)求出循环上限,isPrime()方法用来检测当前数是否为质数*/public static boolean isPrime(int num)boolean prime=true;int limit=(int)Math.sqrt(num);for(int i=2;i=limit;i+)if(num%i=0)prime=false;break;return prime;,Java EE基础教程,16,2023年8月4日星期五,public static void main(String args)Scanner input=new Scanner(System.in);System.out.print(请输入您要判断的数:);int n=input.nextInt();if(isPrime(n)System.out.println(n+是质数!);else System.out.println(n+不是质数!);,Java EE基础教程,17,2023年8月4日星期五,4.1.2方法重载方法重载指一个类中有多个方法享有相同的名字,但是这些方法的参数必须不同,或者是参数的个数不同,或者是参数类型不同。返回类型不能用来区分重载的方法。其实方法重载的最主要的作用就是实现同名的构造方法可以接受不同的参数。参数类型的区分度一定要足够,例如不能是同一简单类型的参数,如int与long。,Java EE基础教程,18,2023年8月4日星期五,例4-3 创建一个类,该类包含两个重载的方法,对该类进行测试。程序清单:ch04MethodOverloadingTest.javaimport java.io.*;class MethodOverloadingvoid receive(int i)System.out.println(Receive one int data);System.out.println(i=+i);,Java EE基础教程,19,2023年8月4日星期五,void receive(int x,int y)System.out.println(Receive two int datas);System.out.println(x=+x+y=+y);public class MethodOverloadingTestpublic static void main(String args)MethodOverloading mo=new MethodOverloading();mo.receive(1);mo.receive(2,3);,Java EE基础教程,20,2023年8月4日星期五,例4-4 编译并运行下面的程序,分析运行结果,体会其中方法重载的用法,进一步理解方法重载的概念。程序清单:ch04OverLoadingDemo.javaclass Father void speak()/无参数的speak()方法 System.out.println(I am Father!);void speak(String s)/有参数的speak(String s)方法 System.out.println(I like+s+.);,Java EE基础教程,21,2023年8月4日星期五,public class OverLoadingDemo public static void main(String args)Father x=new Father();x.speak();/调用无参的speak()方法 x.speak(music);/调用有参的speak(music)方法,Java EE基础教程,22,2023年8月4日星期五,4.1.3构造方法Java中有一种特殊的方法叫构造方法(Constructor),它是产生对象时需要调用的方法。Java 中的每个类都有构造方法,用来初始化该类的一个对象。构造方法具有和类名相同的名称,而且不返回任何数据类型。重载经常用于构造方法。构造方法只能由new运算符调用。,Java EE基础教程,23,2023年8月4日星期五,构造方法的形式如下:public 类名(参数列表)语句体说明:构造方法名必须为该类名;可以通过参数表和方法体来给生成的对象的成员变量赋初值;构造方法没有任何返回值。每个类至少有一个构造函数。类被定义时如果没有显式地定义一个构造方法,那么编译器会自动创建一个默认构造方法,缺省构造函数没有参数,而且函数体为空。缺省构造方法的形式如下:public类名()这使得能够通过使用“new类名();”语句产生类的对象。,Java EE基础教程,24,2023年8月4日星期五,一旦在类中自定义了构造方法,编译器就不会提供默认的构造方法了。此时,语句“new 类名();”将会引起编译错误。可以通过为几个构造函数提供不同的参数表的办法来重载构造函数。如果有一个类带有几个构造函数,那么也许会想复制其中一个构造函数的某方面效果到另一个构造函数中。可以通过使用关键字this作为一个方法调用来达到这个目的。,Java EE基础教程,25,2023年8月4日星期五,例如:public class Employee private String name;private int salary;public Employee(String n,int s)name=n;salary=s;public Employee(String n)this(n,0);public Employee()this(Unknown);,在第二个构造函数中,有一个字符串参数,调用this(n,0)将控制权传递到构造函数的第一个版本,即采用了一个String参数和一个int参数的构造函数中。在第三个构造函数中,它没有参数,调用this(“Unknownn”)将控制权传递到构造函数的第二个版本,即采用了一个String参数的构造函数中,再由第二个版本传递带第一个版本中。,Java EE基础教程,26,2023年8月4日星期五,在任何构造函数中如果出现对于this的调用,则必须是第一个语句。例4-5 设计一个矩形类Rectangle,该类重载了多个构造方法。程序清单:ch04Crctngle.javaimport java.io.*;class Rectangle/矩形类 private int width;/矩形的宽度 private int length;/矩形的长度 Rectangle()/不带参数的构造函数,缺省的给出长(30)和宽(20)length=30;width=20;Rectangle(int l,int w)/带参数的构造函数 length=l;width=w;,Java EE基础教程,27,2023年8月4日星期五,Rectangle(Rectangle r)/此构造方法以另一个Rectangle对象作为参数 width=r.width();/通过对象调用函数并附值给相应变量 length=r.length();int width()/返回宽度 return width;int length()/返回长度 return length;,Java EE基础教程,28,2023年8月4日星期五,public class CRctngle public static void main(String args)Rectangle x1=new Rectangle();/声明类的对象并实例化 Rectangle x2=new Rectangle(50,40);/声明类的对象并初始化 Rectangle x3=new Rectangle(x1);System.out.println(x1.length()=+x1.length();System.out.println(x1.width()=+x1.width();System.out.println(x2.length()=+x2.length();System.out.println(x2.width()=+x2.width();System.out.println(x3.length()=+x3.length();System.out.println(x3.width()=+x3.width();,Java EE基础教程,29,2023年8月4日星期五,4.1.4对象有了类,就可以创建类的对象。对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。一个对象的生命周期包括三个阶段:生成、使用和消除。,Java EE基础教程,30,2023年8月4日星期五,1对象的生成对象的生成包括声明、实例化。格式为:className objectName=new className(paramlist);声明:className objectName 声明并不为对象实体分配内存空间,而只是分配一个引用空间;对象的引用类似于指针,是32位的地址空间,它的值指向一个堆内存的数据空间,它存储着有关数据类型的信息以及堆内存中当前对象实体的地址,而对于对象实体所在堆中的实际的内存地址是不可操作的,这就保证了对象实体的安全性。,Java EE基础教程,31,2023年8月4日星期五,实例化:运算符new为对象分配内存空间,它调用对象的构造方法,返回对象的引用;一个类的不同对象分别占据不同的内存空间。如果类中没有显示给出构造方法,系统会调用默认的构造方法。,Java EE基础教程,32,2023年8月4日星期五,2对象的使用通过运算符“.”可以实现对对象属性的访问和方法的调用。属性和方法可以通过设定访问权限来限制其它对象对它的访问。访问对象属性的格式:objectName.variable;objectName是一个已生成的对象。例:person.name=“Jack”;调用对象的方法的格式:objectName.methodName(paramlist);例如:x.speak(“music”);new Father().speak();,Java EE基础教程,33,2023年8月4日星期五,3对象的清除Java 有所谓“垃圾收集”机制,这种机制周期地自动扫描对象的动态内存区,检测某个实体是否已不再被任何对象所引用,如果发现这样的实体,就释放实体占有的内存。因此,Java 编程人员不必象C+程序员那样,要时刻自己检查哪些对象应该释放内存。系统垃圾回收方法为:System.gc()。当系统内存用尽或调用System.gc()要求垃圾回收时,垃圾回收线程与系统同步运行。,Java EE基础教程,34,2023年8月4日星期五,下面进一步分析对象的内存模型,加深对对象在内存在存在形式的了解。程序如下:class Monkey float hight,weight;String head,ear,hand,foot,mouth;void speak(String s)System.out.println(s);class LittleMonkey public static void main(String args)Monkey littlemonkey;/声明对象。littlemonkey=new Monkey();/使用 new和默认构造方法为对象分配内存。,Java EE基础教程,35,2023年8月4日星期五,Java EE基础教程,36,2023年8月4日星期五,当用类创建一个对象时,类中的成员变量被分配内存空间,这些内存空间称做该对象的实体,而对象变量中存放着引用,以确保实体由该对象变量操作使用。声明对象变量littlemonkey后,littlemonkey的内存中还没有任何数据,这时的littlemonkey是一个空对象,空对象不能使用,因为它还没有得到任何“实体”。必须再进行为对象实体分配内存的步骤,即创建对象实体。,Java EE基础教程,37,2023年8月4日星期五,当系统见到littlemonkey=new Monkey();时,就会做两件事:首先,为 height、weight、head、ear、mouth、hand、foot 各 个 变 量 分配 内 存。即Monkey类的成员变量被分配内存空间。如果成员变量在声明时没有指定初值,那么,对于整型变量默认初值是 0,对于浮点型,默认初值是0.0,对于 booean 型默认初值是false,对于引用型默认初值是null。其次,new运算符在为变量height、weight、head、ear、mouth、hand、foot 分配内存后,返回一个代表这实例对象的内存位置的首地址号码给littlemonkey,可认为这个引用就是littlemonkey在内存里的名字,而且这个名字引用是Java系统确保分配给height、weight、head、ear、mouth、hand、foot 的内存单元将由littlemonkey 操作管理。称 height、weight、head、ear、mouth、hand、foot分配的内存单元是属于对象littlemonkey的。所谓为对象分配内存就是指为它分配变量,并获得一个引用,以确保这些变量由它来“操作管理”。,Java EE基础教程,38,2023年8月4日星期五,例4-6 以Point 类为例说明对象与实体的关系。程序清单:ch04TestPoint.javaclass Point int x,y;Point()x=0;y=0;Point(int x,int y)this.x=x;this.y=y;class TestPoint public static void main(String args)Point p1=new Point(34,56);Point p2=new Point(21,67)p1=p2;,Java EE基础教程,39,2023年8月4日星期五,程序中使用了赋值语句“p1=p2;”把引用变量p2在内存中的名字赋给了p1,因此p1和p2本质上是一样的了,即p1、p2 有相同的实体。虽然在程序中p1,p2 是两个名字,但在系统看来他们引用同一个对象,他们对应的是同一个地址。此时p1、p2如同一个人有两个名字一样。系统将取消原来分配给p1的内存。这时如果输出 p1.x的结果将是21,而不是34。,Java EE基础教程,40,2023年8月4日星期五,一个类创建的两个对象,如果具有相同的引用,那么就具有完全相同的实体。对象不仅可以操作自己的变量改变状态,而且还拥有了调用创建它的那个类中的方法的能力,对象通过使用这些方法可以产生一定的行为。对象创建之后,就有了自己的变量,即对象的实体。通过使用运算符“.”,对象可以实现对自己的变量和方法的访问。类中的方法可以操作成员变量。当对象调用方法时,方法中出现的成员变量就是指该对象的成员变量。,Java EE基础教程,41,2023年8月4日星期五,例4-7创建华氏-摄氏温度转换类(TempConverter),对华氏-摄氏温度进行转换并输出转换结果。程序清单:ch04TempConverter.javapublic class TempConverter public static void main(String args)TempConverter t=new TempConverter();t.data();protected void data()for(int i=-40;i=50;i+=10)float c=(i-32)*(5f/9);print(i,c);protected void print(float f,float c)System.out.println(华氏温度+f+=摄氏温度+c);,Java EE基础教程,42,2023年8月4日星期五,例4-8 创建一个“园”类,再创建一个“圆锥”类,将一个圆的对象的引用传递给圆锥对象的底圆。程序清单:ch04Taper.javaclass 圆 double 半径;圆(double r)半径=r;double 计算面积()return 3.14*半径*半径;void 修改半径(double 新半径)半径=新半径;double 获取半径()return 半径;,class 圆锥 圆 底圆;double 高;圆锥(圆 circle,double h)this.底圆=circle;this.高=h;double 计算体积()double volume;volume=底圆.计算面积()*高/3.0;return volume;void 修改底圆半径(double r)底圆.修改半径(r);,Java EE基础教程,43,2023年8月4日星期五,double 获取底圆半径()return 底圆.获取半径();public class Taper 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.计算体积();,Java EE基础教程,44,2023年8月4日星期五,例4-9 设计一个计算阶乘的类Fact,对该类进行测试。程序清单:ch04CheckFact.javaclass Fact float fact(int n)/定义计算n!的方法 int i;float x=1;for(i=1;in;i+)x=x*n;return x;public class CheckFact public static void main(String args)Fact x=new Fact();System.out.println(x.fact(10);/计算10!System.out.println(x.fact(15);/计算15!,Java EE基础教程,45,2023年8月4日星期五,例4-10 通过递归调用类中的方法,计算出Fibinacii序列的前十项,Fibinacii序列的前两项是1,后续每项的值都是该项的前两项之和。程序清单:ch04ItemsFibi.javaclass Fibi public long fibinacii(int n)long c=0;if(n=1|n=2)c=1;else c=fibinacii(n-1)+fibinacii(n-2);/递归调用 return c;,Java EE基础教程,46,2023年8月4日星期五,public class ItemsFibi public static void main(String args)Fibi a=new Fibi();for(int i=1;i=10;i+)System.out.print(+a.fibinacii(i);,Java EE基础教程,47,2023年8月4日星期五,4.1.5父类、子类和继承Java中,所有的类都是通过直接或间接地继承java.lang.Object得到的。Object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类就默认继承Object类。因此,Object类是Java类层中的最高层类,是所有类的超类。Java中任何一个类都是它的子类,由于所有的类都是由Object衍生出来的,所以Object的方法适用于所有类。继承而得到的类为子类,被继承的类为父类,父类包括所有直接或间接被继承的类。子类继承父类的状态和行为,同时也可以修改父类的状态或重载父类的行为,并添加新的状态和行为,Java中不支持多重继承。,Java EE基础教程,48,2023年8月4日星期五,1创建子类通过在类的声明中加入extends子句来创建一个类的子类,其格式如下:class SubClass extends SuperClass 把SubClass声明为SuperClass的直接子类,如果SuperClass又是某个类的子类,则SubClass同时也是该类的(间接)子类。子类可以有选择地继承父类的内容。如果缺省extends子句,则该类为java.lang.Object的子类。子类可以继承父类中访问权限设定为public、protected的成员变量和方法。但是不能继承访问权限为private的成员变量和方法。,Java EE基础教程,49,2023年8月4日星期五,2继承继承是一种由已有的类创建新类的机制,通过继承实现代码复用。利用继承,我们可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一般类的状态和行为,并根据需要增加它自己的新的状态和行为。子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量。但Java不支持多重继承,即一个类从多个超类派生的能力。,Java EE基础教程,50,2023年8月4日星期五,子类继承父类的方法与属性,而自己本身又增加了新的属性和方法,所以子类的功能比父类要强大。尽管一个子类从父类继承所有的方法和变量,但它不继承构造函数。继承是在维护和可靠性方面的一个伟大进步,如果在父类中进行修改,那么,子类就会自动修改,而不需要程序员做任何工作,除了对它进行编译。(1)子类和父类在同一包中的继承性如果子类和父类在同一个包中,那么,子类自然地继承了其父类中不是 private 的成员变量作为自己的成员变量,并且也自然地继承了父类中不是 private 的方法作为自己的方法。,Java EE基础教程,51,2023年8月4日星期五,例4-11 子类和父类在同一包中的继承性。程序清单:ch04SubBoy.javaimport java.applet.*;import java.awt.*;class Father1 private int money;float weight,height;String head;String speak(String s)return s;,Java EE基础教程,52,2023年8月4日星期五,class Son extends Father1 String hand,foot;public class SubBoy extends Applet Son boy;public void init()boy=new Son();boy.weight=120f;boy.height=1.75f;boy.head=一个聪明的大脑袋,;boy.hand=两只巧手,;boy.foot=一双喜欢瞎跑的脚。;,Java EE基础教程,53,2023年8月4日星期五,public void paint(Graphics g)g.drawString(boy.speak(我是儿子),5,20);g.drawString(boy.head+boy.hand+boy.foot,5,40);g.drawString(体重:+boy.weight+身高:“+boy.height,5,60);,Java EE基础教程,54,2023年8月4日星期五,(2)子类和父类不在同一包中的继承性如果子类和父类不在同一个包中,那么,子类继承了父类的 protected,public 成员变量做为子类的成员变量,并且继承了父类的 protected、public 方法为子类的方法。如果子类和父类不在同一个包里,子类不能继承父类的友好变量和友好方法。,Java EE基础教程,55,2023年8月4日星期五,例4-12 本例中,Father和Jerry 分别隶属不同的包。程序清单1:ch04tomlangshanFather.java:package ch04.tom.langshan;public class Father int height;protected int money;public int weight;public Father(int m)money=m;protected int getMoney()return money;void setMoney(int newMoney)money=newMoney;,Java EE基础教程,56,2023年8月4日星期五,程序清单2:ch04suncomJerry.java:package;import ch04.tom.langshan.Father;public class Jerry extends Father/Jerry和Father在不同的包中.public Jerry()super(20);public static void main(String args)Jerry jerry=new Jerry();/jerry.height=12;/非法,因为Jerry没有继承友好的height.jerry.weight=200;/合法.jerry.money=800;/合法.int m=jerry.getMoney();/合法./jerry.setMoney(300);/非法,因为Jerry没有继承友好的方法setMoney.System.out.println(m=+m);,Java EE基础教程,57,2023年8月4日星期五,3成员变量的隐藏和方法的重写当我们在子类中定义的成员变量和父类中的成员变量同名时,则父类中的成员变量被隐藏,此时称子类的成员变量隐藏了父类的成员变量。如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内暂时失效。这时如果想在该方法内使用成员变量,就必须使用关键字this。例如:class 三角形 float sideA,sideB,sideC,lengthSum;void setSide(float sideA,float sideB,float sideC)this.sideA=sideA;this.sideB=sideB;this.sideC=sideC;this.sideA、this.sideB、this.sideC就分别表示成员变量 sideA、sideB、sideC。,Java EE基础教程,58,2023年8月4日星期五,当子类中定义了一个方法,并且这个方法的名字、返回类型、参数个数和类型与父类的某个方法完全相同时,父类的这个方法将被隐藏,这就是父类方法的重写,也称之为方法的覆盖。子类通过隐藏父类的成员变量和重写父类的方法,可以把父类的状态和行为改变为自身的状态和行为。,Java EE基础教程,59,2023年8月4日星期五,例如:class SuperClassint x;void setX()x=0;class SubClass extends SuperClassint x;/隐藏了父类的变量xvoid setX()x=5;/重写了父类的方法 setX()该例中,SubClass是SuperClass的一个子类。其中声明了一个和父类SuperClass同名的变量x,并定义了与之相同的方法s

    注意事项

    本文(一章类与对象的基本概念.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开