菜鸟学JAVA(五)—— 继承关系
继承是面向对象程序设计中最显著的一个特征,继承机制模仿了现实中IS-A的关系。 有两句俗话“龙生龙,凤生凤,老鼠的儿子会打洞”,“一龙生九子,九子各不同”。 我觉得这两句话形象的描绘了继承中两个显著的特征,一个是相同性,一个是差异性。 在编程中,我们通常把某一组相似对象的基础的、共有的、通用的属性和方法设计成父类,再通过继承父类生成新的子类,而子类又具有他们各自的特征,从而使代码的重用性得到极大地提高。 在Java中只支持单继承(多继承有点不符合伦理嘛) 1、继承的表现方式 在Java中继承用extends关键字来定义,我先举个例子
class A { } class B extends A { } 这里A就是父类,B就是A的子类,B继承A。
2、继承的使用 B b = new B(); 这条语句在JVM中是先调用父类的无参构造方法,然后再调用子类的无参构造方法。(一定是先调用父类再调用子类,没有父亲当然没有儿子),如果父类构造方法是有参构造方法,则在子类构造方法中就要使用super关键字,可以把super理解为指向父类的一个指针。
例如: class A { public A(int i)
System.out.println("调用父类构造方法" + i); }
class B extends A {
public B() { super(1); System.out.print("构造子类"); } } 这里子类使用了super()显示调用了父类的构造方法,系统就不会调用父类的默认无参构造方法。要注意的是:super();要写在子类构造方法的第一行。 3、继承的特性和注意事项 继承的三个特性 1)父类有的方法和属性,子类也有。 2)父类没有的,子类可以添加。 3)父类有的,子类可以改变。 继承注意事项 1)父类的构造方法无法继承 2)父类的属性和方法被继承 3)子类默认调用父类无参构造函数也就是super(); 4)super()要写在子类构造方法的第一行
Java中"一切事物皆对象",任何类都是Object的子类,或间接子类。换句话说Object是所以类的老祖宗。
4、方法的重写 在上面说了父类有的,子类可以改变,这说的也就是方法重写。我们很需要重写这个功能的,假设动物类存在"跑"的方法,从中派生出马和狗,马和狗的跑得形态是各不相同的,因此同样方法需要两种不同的实现,这就需要"重新编写"基类中的方法。重写需要的条件:1、必须是在继承里,2、方法名、返回值类型、参数个数和参数类型 都必须相同3、派生类重写的方法的访问权限不能低于基类的权限4、派生类抛出的异常应该和基类相等或比基类更小下面的例子是对继承的练习:
继承就复习到这里吧,继承中还有一些内容没有说到,这是最基本的,其他的就在实际编程中慢慢体会吧。
还是送上一句话: 不积跬步,无以至千里;不积小流,无以成江海。
——《荀子?劝学篇》