java基础chap07

上传人:xx****x 文档编号:243017333 上传时间:2024-09-13 格式:PPT 页数:29 大小:124KB
返回 下载 相关 举报
java基础chap07_第1页
第1页 / 共29页
java基础chap07_第2页
第2页 / 共29页
java基础chap07_第3页
第3页 / 共29页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Chap 07 对象的进一步探讨 -面向对象中的继承,理解类的继承关系,掌握继承的实现和应用,掌握子类对父类方法的覆盖,掌握子类对父类方法的重载,掌握this和super的使用,理解子类与父类的关系,理解多态的含义,掌握它是如何实现的,加深对面向对象程序设计思想的理解,1,类的继承,面向对象的程序设计思想不仅可以使用类和对象来反映现实生活中的一切事物,还能够通过,类的继承,来反映事物之间的关系。,继承使得众多类之间有了层次关系,下层的类能够具备上层类的非私有属性和方法,还可以根据自己的需要添加新的属性和方法。,上层的类即被继承的类,叫超类/父类(superclass)。下层的类叫子类(subclass)。,2,继承的实现,格式:,修饰符 class 类名,extends,父类名,/定义成员变量,/定义成员方法,类的继承关系由关键字extends确定。,子类自动继承了父类的所有,非私有,的成员变量和成员方法。,3,继承的实现,class A ,protected int value;,public int getValue()return value;,class B,extends,A ,private String s;,public String getString()return s;,B,类继承,A,类的公有和保护成员,此时,B,类有两个,成员变量,两个成员方法。,4,继承的实现,class A, protected int value;,public int getValue()return value;,class B,extends,A,private,String s;,public String getString()return s;,class C extends B, private char ch;,public char getchar()return ch;,C,类继承,B,类的公有和保护成员,此时,C,类有两个,成员变量,三个成员方法。,5,继承的层次,Java中可以实现多重继承,即类的继承关系是可以层层传递下去的。,Java规定子类与父类之间是,单继承,,即每个子类只能有一个父类。但一个父类是可以有多个子类的。,6,继承的意义,继承避免了重复的代码程序。,在父类中定义子类共同的程序代码,各子类只需继承父类既可,不必在每个子类中都重复写上一遍。如果需要改变相关代码,只需修改父类中的内容,子类会发生同样的变化。,定义出共同的协议。,继承让我们可以确保在某个父型之下的所有类都会有父型所持有的全部非私有属性和方法。,继承让程序变得更简洁、有效率,更易扩展。,7,类的继承,class Person,String name ; char sex;,void showPerson(),System.out.println(name is +name+,sex is +sex);,class Student,extends,Person,int num; double score;,void setItem(String na, char s, int n, double sco),name = na;,sex = s;,num = n;,score = sco;,void showStudent(),System.out.println(num is +num+,score is +score);,Person类的公有成员被Student,类全部继承,即Student类也包含,同样的内容。,8,类的继承,public class TestApp,public static void main(String s),Student stu;,/使用子类声明对象,stu = new Student();,/构造后的对象包含四个成员变量,,/三个成员方法,stu.setItem(小明,男,101,87.5);,stu.showPerson();,/调用父类成员方法,stu.showStudent();,/调用子类成员方法,name is 小明,sex is 男,num is 101,score is 87.5,9,方法的覆盖(重写),在一个类的子类中,可以定义与父类中的方法同名的方法,并且它们的,参数列表,返回类型也完全相同,子类中的方法就会覆盖掉父类中的方法,这种行为就叫,方法覆盖。,子类中的方法不能抛出父类中被覆盖方法没有抛出的异常。,子类中方法的访问控制不能比父类中被覆盖方法的访问控制范围窄。,10,方法的覆盖,所谓子类中方法的访问控制不能比父类中,方法的访问控制范围窄是指:,一个package方法可以被重写为package、protected和public的。,一个protected方法可以被重写为protected 和public的。,一个public方法只可以被重写为public的。,11,方法的覆盖举例,class Person String name; char sex;,public void show(),System.out.println(name+sex);,class Student,extends,Person,int num; double score;,public void show(),System.out.println(name+sex+num+score);,Person p = new Person();,Student s = new Student();,p.show(); s.show();,12,静态方法和非静态方法覆盖的区别,子类对父类的非静态方法可以实现方法的覆盖。,静态方法不能实现方法重载。即子类中创建的静态方法不会覆盖父类中相同名字的静态方法。 (父类子类各有一个),13,子类与父类的进一步说明,子类构造方法的说明:,创建子类对象时,其构造方法的调用有着自己的特点和规律:,1. 父类的构造方法先被执行:子类将自动先调用父类中默认的构造方法,再执行自己的构造方法 ;,2. 如果需要调用父类中其它构造方法,要使用super关键字, super关键字必须放在子类构造方法里面的第一行。,3. 调用类中不存在的构造方法会产生错误。,14,子类构造方法说明示例,class SuperClass,int a;,SuperClass(),System.out.println(父类无参构造方法被调用);,void printInfo(),System.out.println(父类的成员a=+a);,class SubClass extends SuperClass,int b;,SubClass(int x, int y),a = x;,b = y;,System.out.println(子类有参构造方法被调用);,void printInfo(),super.printInfo();,System.out.println(子类的成员b=+b);,SubClass obj = new SubClass(3,4);,父类无参构造方法被调用,3存给a,4存给b,子类有参构造方法被调用,15,子类构造方法说明示例,class SuperClass,int a;,SuperClass(int x),a = x;,System.out.println(父类有参构造方法被调用);,void printInfo(),System.out.println(父类的成员a=+a);,class SubClass extends SuperClass,int b;,SubClass(int x, int y),super(x);,b = y;,System.out.println(子类有参构造方法被调用);,void printInfo(),super.printInfo();,System.out.println(子类的成员b=+b);,SubClass obj = new SubClass(3,4);,3存给a,父类有参构造方法被调用,4存给b,子类有参构造方法被调用,16,this关键字的使用,this是对当前对象的一个引用,即代表当前对象自身;,在一个对象的内部,如果想得到该对象的引用,要用this,而不是它的名称;,this可以在普通成员方法和构造方法中使用,不能在静态方法中使用;,对于static属性和方法,不能有this引用。,17,使用this引用类自己的其他成员,class Rect ,double width; double length;,double area()return width*length;,void setItem(double width,double length),width =,width,;,length =,length,;,按照变量定义域的规则,这种情况下成员变量,(蓝)会被方法中局部变量(红)覆盖掉。,this.,this.,使用this引用后,成,员又重新暴露出来了,18,使用this调用同类的其它构造方法,class Person,String name; int age;,Person(String n),name = n;,Person(String n, int a),this(n);,age = a;,Person类的构造方法进行了重载,第二个构造方法带两个参数,在其代码内部通过this(n)调用了第一个构造方法。,19,super关键字的使用,super是对父类的一个引用;,在一个对象的内部,如果想得到该对象父类的引用,要用super,而不是父类名称;,子类引用父类的成员:super.变量名,super.方法名(实参列表),20,super关键字的使用,在子类有方法或变量名与父类有冲突的时候,可以用super.来加以区别;,子类的构造方法中可以通过super(形参表)来调用父类构造方法。,21,父类和子类对象的转换,注意区分“,是,一个”与“,有,一个”:,柳树 是 树,樱花 是 花,钢笔 是 笔,运动员是 人,子类 是 父类,子类 有 父类,在Java中,对这两种情况均可进行灵活应用。,22,父类和子类对象的转换,如果A类是B类的父类,class A ,class B,extends,A ,则有“,子类是父类,” :A a = new B();,父类的引用可以引用子类的对象,但是却不能通过这个引用来调用父类里没有的方法。注意如果有重写方法,此时调用的是子类的方法。,23,父类和子类对象的转换,将它进行强制转换后,就可以调用子类里特有的方法了。,B b=(B)a;,典型应用:父类对象引用不同子类对象,对重载方法实现多态调用/方法参数的兼容问题。,“子类是父类”,具有传递性:钢笔是笔;笔是文具;,钢笔是文具。,24,父类和子类对象的转换示例,class Animal,void sleep() System.out.println(动物也要睡觉休息的); ,void cry(), System.out.println(动物的叫声); ,class Dog,extends,Animal,void eat() System.out.println(小狗啃骨头);,void cry(), System.out.println(小狗叫:汪汪);,class Cat,extends,Animal,void play()System.out.println(小猫玩绒球);,void cry(), System.out.println(小猫叫:喵喵);,25,父类和子类对象的转换示例,Animal pet;,/声明Animal类的对象pet,System.out.println(,pet引用子类Dog类的对象,可以调用的方法有sleep()和cry();,pet = new Dog();,pet.sleep();,pet.cry();,System.out.println(,pet引用子类Cat类的对象,可以调用的方法有sleep()和cry();,pet = new Cat();,pet.sleep();,pet.cry();,System.out.println(,pet强制类型转换为子类Cat后,可以调用子类新增的的方法了!);,Cat d = (Cat)pet;,d.play();,/(Cat)pet).play();,pet引用子类Dog类的对象,可以调用的方法有sleep()和cry(),动物也要睡觉休息的,小狗叫:汪汪,pet引用子类Cat类的对象,可以调用的方法有sleep()和cry(),动物也要睡觉休息的,小猫叫:喵喵,pet强制类型转换为子类Cat后,可以调用子类新增的的方法了!,小猫玩绒球,26,运行时多态,运行时多态(polymorphism):运行时多态是面向对象程序设计中代码重用的一个最强有力的机制。具体的就是:在父类中定义一个方法,而在子类中重载或覆盖这些方法,运行时,由系统根据被引用对象的类型动态决定实际调用的方法。,Java中通过方法的重载和方法的覆盖来实现多态。,方法重载有类内部方法的重载、子类对父类的方法进行重载;,方法覆盖限于子类对父类方法进行覆盖。,27,方法重载与方法覆盖的比较,重载方法必须满足以下条件:,方法名必须相同。,方法的参数表必须不相同。,方法的返回类型可以不相同。,方法的修饰符可以不相同。,方法覆盖必须满足以下条件:,子类方法的名称及参数表必须与所覆盖方法相同。,子类方法的返回类型必须与所覆盖方法相同。,子类方法不能缩小所覆盖方法的访问权限。,子类方法不能抛出比所覆盖方法更多的异常。,28,小结,使用extends实现子类对父类的继承。继承关系具有传递性,一个父类可以有多个子类,一个子类只能有一个父类。,子类继承父类非私有的成员,可以对父类中的方法进行重写,实现方法覆盖;子类也可以重载父类中的方法。,this表示在类的内部引用当前对象自身;super表示在类的内部引用父类。,父类和子类对象可进行转换,进一步实现多态。,29,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!