您所在的位置:主页 > JAVA技术 >

Java类的继承总结

时间:2014-02-13 10:23来源:未知 作者:疯狂java 点击:

  

  在生活中我们往往把许多东西归为一个整体,如球有篮球,足球,高尔夫球等,它们都具有球类共有的属性和方法,对于属性来说如大小,体积,重量等,对于方法亦如此。既然如此,在定义各种球的同时我们难道要重复定义相应的类,而且还要重复编写已有的代码吗??

  显然,简洁之美才为我们所推崇。于是,联系生活中的继承关系,类的继承就此诞生。

  Java继承的关键字是extends,格式为:

  public class 类名(子类,超类,派生类) extends 类名(父类,基类) {

  }
 

  谈到继承,我们脑海中自然浮现出几个问题:子类继承了父类的哪些属性和方法?能调用哪些属性和方法?实际上,子类继承了父类所有的属性和方法,然而,却不能调用所有的属性和方法。此外,调用也分为两种情形:

  1.当子类和父类在同包下时:默认的,受保护的,公有的属性和方法能被子类的对象以及在子类中调用。

  2.当子类和父类不在同一个包下时,若创建的对象不在子类或者父类中时,可调用的属性和方法就只有公有的;如果在子类的{}中,可调用的属性和方法包括公有的和受保护的。

  此外谈到继承,我们也会提到“方法重写”这个名词。比如说编写打球的方法与打篮球的方法代码时,就是在进行方法重写。实现方法重写的条件:两者必须要存在继承关系,而且方法的返回值数据类型,方法名,参数个数,参数类型,参数顺序必须要完全一致。不过呢,子类在重写方法时,访问修饰符的范围可以大于或者等于父类方法的访问修饰符。俗话说:“姜还是老的辣,酒还是陈的香!”不过尼,在方法重写这里,你如果惦记这个就out了!当实现方法重写后,如果你创建的对象是子类的对象,那么会优先调用子类的方法,如果子类没有改方法,才会执行父类中定义的方法。
 

  再讲下一个相关的名词“自动转型”。自动转型有两种格式:

  格式一:

  父类 对象名;

  对象名 = new 子类名(实参,...);

  父类 对象名 = new 子类名(实参,...);

  格式二:

  第三方类中的方法

  public void method(父类 对象名){

  //调用的方法必须要在父类中存在

  }

  创建对象

  父类 对象名A = new 子类名(实参,...);

  子类 对象名B = new 子类名(实参,...);

  调用方法

  method(对象名A);

  method(对象名B);

  它的条件也是两者必须有继承关系。可以发现,使用自动转型,我们能实现多态(由方法重载,继承,方法重写,自动转型等技术点的组合),减少重复的代码。只是它也存在缺陷,Java在编译程序时,只会根据对象名的类型,去查找是否存在该方法,如果存在,则通过编译,如果不存在则报错。