收藏 分享(赏)

java面向对象_教程.ppt

上传人:dreamzhangning 文档编号:3321808 上传时间:2018-10-13 格式:PPT 页数:36 大小:837.50KB
下载 相关 举报
java面向对象_教程.ppt_第1页
第1页 / 共36页
java面向对象_教程.ppt_第2页
第2页 / 共36页
java面向对象_教程.ppt_第3页
第3页 / 共36页
java面向对象_教程.ppt_第4页
第4页 / 共36页
java面向对象_教程.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、,第四章 面向对象-2,继承,上转型,多态,课程安排,访问权限,类有2种重要的成员:成员变量和方法。类创建的对象可以通过“.”运算符访问分配给自己的变量,也可以通过“.”运算符调用类中的实例方法和类方法。类在定义声明成员变量和方法时,可以用关键字private、protected和public来说明成员变量和方法的访问权限,使得对象访问自己的变量和使用方法受到一定的限制。1私有变量和私有方法用关键字private修饰的成员变量和方法被称为私有变量和私有方法。对于私有成员变量或方法,只有在本类中创建该类的对象时,这个对象才能访问自己的私有成员变量和类中的私有方法,访问权限,访问权限,class

2、Employeeprivate double salary=1800;/私有属性,类外无法访问public void setSalary(double salary)if(salary1800 ,public class Example public static void main(String args )Employee zhang=new Employee(); Employee wang=new Employee(); zhang.setSalary(100); System.out.println(“zhang的薪水:“+zhang.getSalary(); wang.setSal

3、ary(3888);/wang.salary=88888;是非法的,因为对象wang已经不在Employee类中 System.out.println(“wang的薪水:“+wang.getSalary(); ,用某个类在另外的一个类中创建对象后,如果不希望该对象直接访问自己的变量(即通过“.”运算符来操作自己的成员变量),就应将该变量访问权限设置为private。面向对象编程提倡对象应当调用方法来改变自己的属性,我们应当提供操作数据的方法,这些方法可以经过精心设计,使得对数据的操作更加合理。,2公有变量和公有方法用public修饰的成员变量和方法被称为共有变量和共有方法,如:class A

4、public float weight; /weight被修饰为public的float型变量。public float f(float a,float b) /方法 f是public方法。 ,访问权限,当我们在任何一个类中用类A 创建了一个对象后,该 对象能访问自己的public变量和类中的public方法。如:class B void g() A a = new A();a.weight = 23f; /合法a.f(3,4); /合法,3受保护的成员变量和方法用protected修饰的成员变量和方法被称为受保护的成员变量和受保护的方法,如: class A protected float

5、weight; /weight被修饰为public变量。protected float f(float a,float b) /f是public方法。 ,访问权限,假如B与A是同一个包中的类,那么,B类中的a.weight、a.f(3,4)都是合法的。class B void g() Tom a = new Tom();a.weight=23f; /合法a.f(3,4); /合法,假设对象a是类A创建的,对象对成员的访问权限总结如下:,一个类可以把对象作为自己的成员变量,如果用这样的类创建对象,那么该对象中就会有其它对象,也就是说该对象将其他对象作为自己的组成部分,或者说该对象是由几个对象组合

6、而成 。,对象的组合,对象的组合,public class Rectangleprivate double x,y,width,height; public void setX(double x)this.x=x;public double getX()return x;. ,public class Circleprivate double x,y,radius;public void setX(double x)this.x=x;public double getX()return x; ,public class Geometryprivate Rectangle rect;privat

7、e Circle circle;Geometry(Rectangle rect,Circle circle)this.rect=rect;this.circle=circle;public void setCirclePosition(double x,double y)circle.setX(x);circle.setY(y); ,生活中的继承,生活中,继承的例子随处可见,动物,食草动物,食肉动物,谁是父类? 谁是子类? 能说出继承的特点吗?,继承需要符合的关系:is-a,父类更通用、子类更具体,生活中的继承,子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性,巴士是汽车吗? 卡车

8、是汽车吗? 出租车是汽车吗?,汽车,请问:出租车包含哪些属性和行为呢?,子类与父类继承是一种由已有的类创建新类的机制。利用继承,我们可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一般类的状态和行为,并根据需要增加它自己的新的状态和行为。由继承而得到的类称为子类,被继承的类称为父类(超类)。,子类与父类,父类可以是自己编写的类也可以是java类库中的类。利用继承有利于实现代码的重复使用,子类只需要添加新的功能代码即可。Java不支持多重继承,即子类只能有一个父类。 使用关键字extends来声明一个类是另外一个类的子类,格式如下:class 子类名 extends

9、 父类名 ,子类与父类,1继承的定义所谓类继承就是子类继承父类的成员变量和方法作为自己的成员变量和方法,就好象它们是在子类中直接声明一样。当然,子类能否继承父类的变量和方法还有一定的限制。下面对其进行详细介绍。2子类和父类在同一包中的继承性如果子类和父类在同一个包中,那么子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法。继承的成员变量以及方法的访问权限保持不变。3子类和父类不在同一包中的继承性如果子类和父类不在同一个包中,那么子类只能继承父类的protected、public成员变量和方法,继承的成员或方法的

10、访问权限不变。,子类与父类,class Fatherprivate int moneyDollar=300;int moneyHK=200;int add(int x,int y)return x+y; ,class Son extends Fatherint moneyRMB=800;public void changMoneyHK(int x)moneyHK=x; public void changMoneyRMB(int x)moneyRMB=x;int subs(int x,int y)return x-y; ,子类与父类,public class Examplepublic stat

11、ic void main(String args)int a=5,b=3; Son son=new Son();son.changMoneyHK(666);son.changMoneyRMB(5000);System.out.println(“儿子的港币是继承的属性,当前的值是:“+son.moneyHK);System.out.println(“儿子的人民币是新增的属性,当前的值是:“+son.moneyRMB);System.out.printf(“减法是儿子新增的功能,%d-%d等于%dn“,a,b,son.subs(a,b);System.out.printf(“加法是儿子继承的功能,

12、%d+%d等于%dn“,a,b,son.add(a,b); ,子类与父类,当用子类的构造方法创建一个子类的对象时,子类的构造方法总是先调用父类的某个构造方法,如果子类的构造方法没有指明使用父类的哪个构造方法,子类就调用父类的不带参数的构造方法。,子类对象的构造过程,1成员变量的隐藏子类可以隐藏继承的成员变量,当在子类中定义和父类中同名的成员变量时,子类就隐藏了继承的成员变量,即子类对象以及子类自己声明定义的方法操作与父类同名的成员变量。,成员变量隐藏与方法重写,class Apublic double y=11.456789;public void f()y=y+1;System.out.pr

13、intf(“y是double型的变量,y=%fn“,y); ,class B extends Aint y=0;public void g()y=y+100;System.out.printf(“y是int型的变量,y=%dn“,y); ,class Examplepublic static void main(String args )B b=new B();b.y=200;b.g(); /调用子类新增的方法b.f(); /调用子类继承的方法 ,2方法重写子类也可以隐藏方法,子类通过方法重写来隐藏继承的方法。方法重写是指:子类中定义一个方法,并且这个方法的名字、返回类型、参数个数和类型与从父

14、类继承的方法完全相同。子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为。这时,如果子类想使用被隐藏的方法,必须使用关键字super,我们将在后面讲述super的用法。,成员变量隐藏与方法重写,class Aprotected double x=8.0,y=0.888888; public void speak()System.out.println(“我喜欢NBA“);public void cry()y=x+y; System.out.printf(“y=%fn“,y); ,class B extends Aint y=100,z;public void speak()z=2*

15、y;System.out.println(“I love This Game“);System.out.printf(“y=%d,z=%d“,y,z); ,class Examplepublic static void main(String args )B b=new B();b.cry();b.speak(); ,Super关键字有两种用法:一种用法是子类使用super调用父类的构造方法,另一种用法是子类使用super调用被子类隐藏的成员变量和方法。1使用super调用父类的构造方法子类不继承父类的构造方法,因此,子类如果想使用父类的构造方法,必须在子类的构造方法中使用并且必须使用关键字s

16、uper来表示,而且super必须是子类构造方法中的第一条语句。,成员变量隐藏与方法重写,class Aint x,y;A()x=100;y=200;A(int x,int y)this.x=x;this.y=y; ,class B extends Aint z;B(int x,int y)super(x,y);z=300; B( )super(); /可以省略z=800; public void f()System.out.printf(“x=%d,y=%d,z=%dn“,x,y,z); ,public class Example public static void main(String

17、 args)B b1=new B(10,20);b1.f(); B b2=new B();b2.f(); ,2使用super操作被隐藏的成员变量和方法当子类中定义了一个方法,并且这个方法的名字、返回类型、参数个数和类型和父类的某个方法完全相同时,子类从父类继承的这个方法将被隐藏。如果我们在子类中想使用被子类隐藏的成员变量或方法就可以使用关键字super 。,成员变量隐藏与方法重写,class B extends Aint m=1,n=1; long f()long result=0;super.m=10;super.n=20;result=super.f()+(m+n);return resu

18、lt; long g()long result=0;result=super.f();return result/2; ,class Example public static void main(String args )B b=new B();b.m=3;b.n=7;long resultOne=b.g();long resultTwo=b.f();long resultThree=b.g();System.out.println(“resultOne=“+resultOne);System.out.println(“resultTwo=“+resultTwo);System.out.pr

19、intln(“resultThree=“+resultThree); ,class Aint m=0,n=0;long f()return m+n; ,final类不能被继承,即不能有子类,如:final class A 将一个类声明为final类一般是由于安全性考虑。因为一旦一个方法被修饰为final方法,则这个方法不能被重写,即不允许子类通过重写隐藏继承的final方法。,final类和final方法,1对象的上转型我们经常说“老虎是哺乳动物”、“狗是哺乳动物”等。若哺乳类是老虎类的父类,这样说当然正确,但当你说老虎是哺乳动物时,老虎将失掉老虎独有的属性和功能。下面我们就介绍对象的上转型对

20、象。假设,B是A的子类或间接子类,当我们用子类B创建一个对象,并把这个对象的引用放到A类声明的对象中时,比如:A a;a=new B();,对象的上转型对象,那么就称对象a是子类对象b的上转型对象,对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原对象的一些属性和功能。,对象的上转型对象,(1)上转型对象不能操作子类声明定义的成员变量;也不能使用子类声明定义的方法。(2)上转型对象可以操作子类继承的成员变量和隐藏的成员变量,也可以使用子类继承的或重写的方法。(3)上转型对象不能操作子类新增的方法和成员变量(4)可以将对象的上转型对象再强制转换到一个子类对象,这时,该子类对象又具备了子

21、类所有属性和功能。,对象的上转型对象,class Adouble n;int m;void f()System.out.printf(“子类继承方法f(),n=%f,m=%dn“,n,m); void g()System.out.printf(“你好,n=%f,m=%dn“,n,m); ,class B extends Aint n=12;void g()System.out.printf(“子类重写方法g(),n=%d,m=%dn“,n,m); void cry()System.out.printf(“子类新增的方法,n=%d,m=%dn“,n,m); ,public class Examp

22、lepublic static void main(String args )A a;a=new B(); /a是子类对象的上转型对象a.n=0.618; /操作子类隐藏的double类型成员na.m=200; /操作子类继承的成员m,等价于b.m=200;a.f(); /调用子类继承的方法,等价于b.f();a.g(); /调用子类重写的方法,等价于b.g();B b=(B)a; /上转型对象强制转换成子类对象b.n=555; /操作子类新增的int类型成员nb.cry(); / a.cry(); 是非法的 ,和继承有关的多态性是指父类的某个方法被其子类重写时,可以产生自己的功能行为,即同一

23、个操作被不同类型对象调用时可能产生不同的行为。例如,狗和猫都具有哺乳类的功能:“叫声”,当狗操作“叫声”时产生的声音是“汪汪,而猫操作“叫声”时产生的声音是“喵喵”,这就是“叫声”的多态。当一个类有很多子类时,并且这些子类都重写了父类中的某个方法。当我们把子类创建的对象的引用放到一个父类的对象中时,就得到了该对象的一个上转型对象,那么这个上转型对象在调用这个方法时就可能具有多种形态 。因为不同的子类在重写父类的方法时可能产生不同的行为。也就是说,不同对象的上转型对象调用同一方法可能产生不同的行为。,继承与多态,class Animalvoid cry( ) ,class Dog extends Animalvoid cry()System.out.println(“Wang!Wang!“); ,class Cat extends Animalvoid cry()System.out.println(“miaomiao.“); ,public class Example public static void main(String args )Animal animal;animal=new Dog(); /animal是Dog对象的上转型对象animal.cry(); animal=new Cat(); /animal是Cat对象的上转型对象animal.cry(); ,

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

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报