资源预览内容
第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
第9页 / 共36页
第10页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第10讲 继承 (inheritance),1、 继承的概念2、 protected成员3、 应用举例4、 覆盖 (override)5、 子类中的构造方法,继承性是面向对象程序设计语言的另一基本特征,通过继承可以实现代码的复用。继承而得到的类为子类,被继承的类为父类,父类包括所有直接或间接被继承的类。Java中不支持多重继承。通过在类的声明中加入extends子句来创建一个类的子类:class SubClass extends SuperClass 如果缺省extends子句,则该类为java.lang.Object的子类。 子类可以继承父类中访问权限设定为public、 protected、 default的成员变量和方法,但是不能继承访问权限为private的成员变量和方法。,1、 继承的概念,何时选择继承?一个很好的经验:“B是一个A吗?”如果是则让B做A的子类.,常犯的错误A有一个B吗? 例如让汽车轮子成为汽车的子类是错误的,继承,子类是作为另一个类的扩充或修正而定义的一个类。,超(基)类 与 子类 super class 与 sub class,Subclassess commonalities are expressed in the members of the superclass. Objects of subclasses that extend a common superclass can be treated as objects of that superclass. However, superclass objects cannot be treated as objects of their subclasses.,sub class “is - a” super class,类的继承,class Car int car_number; void set_number(int car_num) car_number=car_num; void show_number() System.out.println (“My car No. is :”+car_number); ,TrashCar extends Car (1),class TrashCar extends Car int capacity; void set_capacity(int trash_car_capacity) capacity=trash_car_capacity; void show_capacity() System.out.println(“My capacity is: ” + capacity); ,TrashCar extends Car (2),Car是父类,TrashCar是子类。TrashCar中继承了Car中的两个方法,同时又增加了两个新方法。,TrashCar extends Car (3),public: 任何其它类、对象只要可以看到这个类的话,那么它就可以存取变量的数据,或使用方法。 protected:同一类,同一包可以使用。不同包的类要使用,必须是该类的子类。 private:不允许任何其他类存取和调用。 friendly(default,前边没有修饰字的情况):在同一程序包中出现的类才可以直接使用它的数据和方法.,2、 protected成员,当一个类可以被访问时,对类内的成员变量和成员方法而言,其应用范围可以通过施以一定的访问权限来限定。 同一个类中 同一个包中 不同包中的子类 不同包中的非子类(任意类)privatedefaultprotectedpublic ,3、 应用举例,In a companys payroll application, commission employees (superclass)are paid a percentage of their sales, while base-salaried commission employees(subclass) receive a base salary plus a percentage of their sales.,Ex. 1 CommissionEmployee directly inherits from class Object & has 5 private instance variables,public class CommissionEmployee extends Object private String firstName; private String lastName; private String socialSecurityNumber; private double grossSales; / gross weekly sales private double commissionRate; / commission percentage / five-argument constructor public CommissionEmployee( String first, String last, String ssn, double sales, double rate ) / implicit call to Object constructor occurs here firstName = first; lastName = last; socialSecurityNumber = ssn; setGrossSales( sales ); / validate and store gross sales setCommissionRate( rate ); / validate and store commission rate ,public void setFirstName( String first ) firstName = first; public String getFirstName() return firstName; public void setLastName( String last ) lastName = last; public String getLastName() return lastName; public void setSocialSecurityNumber( String ssn ) socialSecurityNumber = ssn; / should validate public String getSocialSecurityNumber() return socialSecurityNumber; public void setGrossSales( double sales ) grossSales = ( sales 0.0 & rate 1.0 ) ? rate : 0.0; public double getCommissionRate() return commissionRate; public double earnings() return commissionRate * grossSales; public String toString() return String.format( %s: %s %sn%s: %sn%s: %.2fn%s: %.2f, commission employee, firstName, lastName, social security number, socialSecurityNumber, gross sales, grossSales, commission rate, commissionRate ); / end class CommissionEmployee,Ex. 1,Ex. 2 BasePlusCommissionEmployee directly inherits from class Object & has 6 private instance variables,public class BasePlusCommissionEmployee private String firstName; private String lastName; private String socialSecurityNumber; private double grossSales; / gross weekly sales private double commissionRate; / commission percentage private double baseSalary; / base salary per week / six-argument constructor public BasePlusCommissionEmployee( String first, String last, String ssn, double sales, double rate, double salary ) / implicit call to Object constructor occurs here firstName = first; lastName = last; socialSecurityNumber = ssn; setGrossSales( sales ); / validate and store gross sales setCommissionRate( rate ); / validate and store commission rate setBaseSalary( salary ); / validate and store base salary ,Differences between Ex2 and Ex1,public void setFirstName( String first ) firstName = first; public String getFirstName() return firstName; public void setLastName( String last ) lastName = last; public String getLastName() return lastName; public void setSocialSecurityNumber( String ssn ) socialSecurityNumber = ssn; / should validate public String getSocialSecurityNumber() return socialSecurityNumber; public void setGrossSales( double sales ) grossSales = ( sales 0.0 ) ? 0.0 : sales; public double getGrossSales() return grossSales; ,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号