《JAVA面向对象编程(3_2).ppt》由会员分享,可在线阅读,更多相关《JAVA面向对象编程(3_2).ppt(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、n所有的Java程序都是基于类的。类是Java中的一种重要的复合数据类型,是组成Java程序的基本要素。class (变变量定量定义义)(方法定(方法定义义)n创建了一个新类也就意味着创建了一种新的数据类型。实例化一个类,就得到该类的一个对象。类是对象的模板,而对象是类的一个实例。n将活动和属性与每一实体相关联属性属性员工详细资料工资结算表票据凭证收据活动活动计算工资支付工资支付帐单记帐银行交易会计n每个部门的员工可对该部门的数据进行控制和操作对象 车型:法拉利颜色:红色年份:1995活动活动发动停车加速n类的基本形式nclass classname nType Var1;/声明成员变量1nT
2、ype Var2;/声明成员变量2nType Var3;/声明成员变量3nType Method1(Parameters)/声明方法1n/方法的主体1nnType Method2(Parameters)/声明方法2n/方法的主体2nnType Method3(Parameters)/声明方法3n/方法的主体3nnType Method4(Parameters)/声明方法4n/方法的主体4nnn类的变量nclass classname nType Var1;实例变量nstatic Type Var2;类变量 nType Method1(Parameters)/声明方法1n/方法的主体1nnTyp
3、e Method2(Parameters)/声明方法2n/方法的主体2nnn类的方法nclass classname nType Var1;/声明成员变量1nType Var2;/声明成员变量2nType Method1(Parameters)/实例方法n/方法的主体1nnstatic Type Method2(Parameters)/类方法n/方法的主体2(只能对类变量进行操作)nnn方法的重载nclass classname nType Var1;/声明成员变量1nType Var2;/声明成员变量2nType Var3;/声明成员变量3nType Method1(Type1 var4,T
4、ype1 var5)/声明方法1n/方法的主体1nnType Method1(Type2 var6,Type2 var7)/声明方法2n/方法的主体2nnType Method1(Type3 var8)/声明方法3n/方法的主体3nnn构造方法nclass classname nType Var1;/声明成员变量1nType Var2;/声明成员变量2nclassname(Parameters)/构造方法n/方法的主体1nnType Method2(Parameters)/声明方法2n/方法的主体2nnn构造方法的重载nclass classname nType Var1;/声明成员变量1nT
5、ype Var2;/声明成员变量2nclassname(Type1 var3,Type1 var4)/构造方法1n/方法的主体1nnclassname(Type2 var3)/构造方法2n/方法的主体2nnType Method3(Parameters)/声明方法3n/方法的主体3nnclass A public static void main(String args)aa a=new aa(2f,4f);System.out.println(自动调用构造函数后,自动调用构造函数后,a=+a.a+c=+a.c);float s=a.add_ab(1f,2f);System.out.print
6、ln(调用加法运算后调用加法运算后a=+a.a+c=+a.c);class aa float a,c;static int b;aa()a=0;c=0;aa(float x,float y)a=x;c=y;float add_ab(int x,int y)a=x;c=y;return(a+b);float add_ab(float x,float y)a=x;c=y;return(a+b);static void abc(int x)b=x;3.5 对象对象 类是创建对象的模板,当使用一个类创建类是创建对象的模板,当使用一个类创建了一个对象时,可说给出了这个类的一个实例,了一个对象时,可说给出
7、了这个类的一个实例,即类的实例化。即类的实例化。3.对象创建对象对象的内存模型使用对象引用静态变量和静态方法的内存模型创建对象n当创建一个类时,只是创建了一种新的数据类型。对当创建一个类时,只是创建了一种新的数据类型。对象是类的一个实例。象是类的一个实例。n创建对象包括对象声明和分配内存两步(也可合二为一)n对象声明:类名 对象名表;如Student a;n分配内存空间:a=new Student(可带参数);n可合二为一:Student a=new Student(可带参数);关键字 new 通常称为创建运算符,用于分配对象内存,并将该内存初始化为缺省值。一旦 new 完成分配和初始化内存,
8、它就将调用构造函数来执行对象初始化。nclass fruit()n变量的定义;n方法的定义;nnclass FruitDemo n public static void main(String args)n Fruit f=new Fruit(big,red);n n例例3.7使用使用new和和默认默认构造方法构造方法n class Peoplen float height,weight;nn class A n public static void main(String args)n People lily;/声明声明n lily=new People();n /为对象分配内存,使用为对象
9、分配内存,使用new和默认构造方法和默认构造方法n n 例例3.8使用使用new和构造方法和构造方法 class Point int x,y;Point()x=2;y=6;System.out.println(“x=”+x+“,y=”+y);Point(int a,int b)x=a;y=b;System.out.println(“x=”+x+“,y=”+y);public class A public static void main(String args)Point p1,p2;p1=new Point();p2=new point(3,5);对象的内存模型创建对象时系统会做以下事情:在
10、堆区为对象的各个变量分配内存单元,并将对象的引用返回根据构造函数完成各个变量的初始化若使用自定义构造函数,则按该构造函数初始化各变量若没有自定义构造函数,则初始化如下。缺省初始值Java 保证了在任何代码使用该内存之前,已至少将内存初始化为可预知的缺省值 类型缺省值类型缺省值byte(byte)0charu0000 short(short)0float0.0Fint0double0.0Dlong0L对象引用nullbooleanfalse 举例:举例:举例:举例:a.javaa.java对象的内存模型student1student1student1student1heightheightwei
11、ghtweightididsexsexClassClassgradegrade0f0f0 00 00 0falsefalse0 0ox23ab6ox23ab6声明时声明时创建时创建时20002x6yp130003x5yp2图图3.4p1和和p2的内存模型的内存模型Point p1;p1=new Point();Point p1=new Point();注意:注意:一个类可以用一个类可以用new运算符创建运算符创建多个多个不同的对象,这不同的对象,这些对象被分配些对象被分配不同不同的内存空间。的内存空间。以例以例3.8说明:说明:Point p1;/系统会令系统会令p1指向指向null。p1=n
12、ew Point();3.5.3使用对象使用对象使用运算符“.”,可以访问对象的属性和方法1.1.对变量的引用对变量的引用 对象名对象名.变量名变量名2.2.对方法的引用对方法的引用 对象名对象名.方法名方法名对象是引用型变量引用:对象的别名,其工作原理类似于指针。不要将引用看成是对象的指针。引用即是对象它既不是对象的指针,也不是对象的副本。它就是对象。当=右边是对象时,它把其引用赋给左边,而不是建副本。举例:point p1=new point();point p2=new point(6,18);p1=p2;其内存模型表示:对象是引用型变量p1p1ox125ox125x xy yo oo
13、op2p2oxa75oxa756 61818x xy yoxa75oxa756 61818y yx xp1p1p2p2静态变量和静态方法的内存模型静态变量和静态方法在内存中只有一个副本静态变量和静态方法在内存中只有一个副本静态变量和静态方法在内存中只有一个副本静态变量和静态方法在内存中只有一个副本3.6访问权限访问修饰符:public(公有变量和公有方法)友好变量和友好方法protected(保护的变量和方法)private(私有变量和私有方法)public 访问修饰符只有在使用 public 访问修饰符时,类的成员才可被同一包或不同包中的所有类访问。也就是说,public 访问修饰符可以使类
14、的特性公用于任何类。缺省访问权限/protected 访问修饰符缺省的成员可以被同一包中的其他类访问。protected 访问修饰符允许类本身、同一包中的所有类和不同包中的子类访问。如果希望一个成员在当前包外可见,但仅仅是成员所在类的子类直接可见,就要使用 protected 修饰该成员。private 访问修饰符private 访问修饰符是限制性最大的一种访问修饰符。被声明为private的成员只能被此类中的其他成员访问,不能被类外看到。继承体系结构中最高级别的类决不会被声明为 private 类。高级访问控制总结1访问控制private成员缺省的成员protected成员public成员同
15、一类中成员同一包中其他类不同包中子类 不同包中非子类 高级访问控制总结2public public A:所有类所有类B:包中的类包中的类E:包中包中的子类的子类C:所有子类所有子类D:类类本身本身缺省缺省 u 同一类中同一类中 class B1 public int a=1;/友好性、友好性、private、protected public void f()System.out.println(“f”);public static void main(String args)B b=new B();System.out.println(b.a);b.f();u 同一包中同一包中package
16、one;class B1 private int a=1;/友好性、友好性、protected、public private void f()System.out.println(“f”);public static void main(String args)package one;public class B2 public static void main(String args)B1 b=new B1();System.out.println(b.a);b.f();不同包不同包package one;public class B1 private float weight=10f;pr
17、ivate void f()System.out.println(f);package two;import one.B1;public class B3 public static void main(String args)B1 b=new B1();System.out.println(b.a);b.f();不同包的继承关系中不同包的继承关系中package one;public class B1 private float weight=10f;private void f()System.out.println(f);package two;import one.B1;public
18、class B4 extends B1 public static void main(String args)B1 b=new B1();System.out.println(b.a);b.f();3.7 继承继承 继承是一种由已有的类创建新类的机制。继承是一种由已有的类创建新类的机制。利用继承,可以先创建一个公有属性的一般类,利用继承,可以先创建一个公有属性的一般类,根据该一般类再创建具有特殊性质的新类。新类根据该一般类再创建具有特殊性质的新类。新类继承一般类的属性和方法,并根据需要增加自己继承一般类的属性和方法,并根据需要增加自己的新的属性和方法。由继承而得到的类称为的新的属性和方法。由
19、继承而得到的类称为子类子类,被继承的类称为被继承的类称为父类父类(超类超类)。)。Java不支持多重不支持多重继承(子类只能有一个父类)。继承(子类只能有一个父类)。3.7.1 创建子类创建子类格式:格式:class Stu extends People Stu为子类,为子类,People为父类为父类 (1)在同一包中,子类自然的继承了其父类中不用)在同一包中,子类自然的继承了其父类中不用private修饰的成员变量和方法。修饰的成员变量和方法。(2)在不同的包中,子类只能继承其父类中在不同的包中,子类只能继承其父类中public、protected 修饰的成员变量和方法。修饰的成员变量和方法
20、。注意:注意:一个类的声明中无一个类的声明中无extends关键字,这个类被系统默认认关键字,这个类被系统默认认为是为是Object的子类。的子类。3.7.2 成员变量的隐藏和方法的重写成员变量的隐藏和方法的重写(1)当子类中定义的成员变量与父类中的成员变量重名时,)当子类中定义的成员变量与父类中的成员变量重名时,则父类中的成员变量不能被继承。则父类中的成员变量不能被继承。(2)当子类中定义的方法和父类中的方法完全相同时,父)当子类中定义的方法和父类中的方法完全相同时,父类中的方法将被隐藏(即重写了父类的方法或置换了父类类中的方法将被隐藏(即重写了父类的方法或置换了父类的方法)的方法)因此,子
21、类通过成员变量的隐藏和方法的重写可以把因此,子类通过成员变量的隐藏和方法的重写可以把父类的属性和方法改变为自身的属性和方法。父类的属性和方法改变为自身的属性和方法。【例 3.9】class Mu1 float f(float x,float y)return x*y;class Add extends Mu1 float f(float x,float y)/重写了父类的方法重写了父类的方法f()return x+y;public class Main public static void main(String args)Add sum=new Add();System.out.printl
22、n(sum.f(2.5f,3f);3.7.3this 和super关键字n null 代表代表“空空”,在定义一个对象但尚未其分配内在定义一个对象但尚未其分配内存单元时可以指定这个对象为存单元时可以指定这个对象为null;n this 代表当前类的对象;代表当前类的对象;n super 父类对象父类对象1.thisnthis 表示当前对象本身。通过表示当前对象本身。通过this可以顺利的访问到当前可以顺利的访问到当前类的方法和变量。类的方法和变量。n【例例3.10】nClass An int b=8;n A(int b)n System.out.println(b);/b=5n System.
23、out.println(this.b);/b=8n n public static void main(String args)n A c=new A(5);n2.supernSuper表示的是当前对象的直接父类对象,是当前对象的直接父类表示的是当前对象的直接父类对象,是当前对象的直接父类的对象引用。的对象引用。n【3.11】n class Muln float f(float x,float y)return x*y;n class Add extends Muln float f(float x,float y)return x+y;n void m()n float a=f(5f,3f);n float b=super.f(5f,3f);n System.out.println(“a=”+a);n System.out.println(“b=“+b);n npublic static void main(String args)n Add x=new Add();n x.m();n n
限制150内