010Java继承

来源:互联网 发布:资生堂红色蜜露 知乎 编辑:程序博客网 时间:2024/05/17 06:26

继承

1.1泛化的过程:指子类共享父类的数据

1.2extends关键字:在Java中实现类的继承,子类可以继承父类的成员变量和成员方法,如图下:


由上图得:子类Tetromino通过extends继承父类Tetromino,由于父类已经定义Cell类型,长度为4的数组,因而子类可以直接使用cells数组,同时子类也继承了弗雷德所有方法

     注意:Java中只能一个子类集成一个父类(单继承),但一个父类可以有多个子类

1.3继承中的构造方法:调用子类的构造方法,Java默认先调用弗雷德无参构造方法,例如图下:


由上图得,子类构造方法如果没有super()语句,系统会默认的加入一个无参的父类的构造函数,从而保证了初始化继承父类的成员变量。

       注意:当父类没有无参构造函数时&&有参数的构造函数情况下,系统会认定发生编译错误,如图下:


由上图得,Goo的构造函数会调用谷类的无参构造函数,则发生了编译错误。

针对这种情况,我们可以显示的调用父类的构造方法,用super语句,如图下:


由上图得,super(value),显示的调用了父类的构造方法

1.4父类引用指向子类的对象:一个子类的对象可以向上造型为父类的对象,如图下


父类引用obj指向了子类Goo对象,但是obj只能访问父类定义的成员,不能访问子类新添加的部分,如图


由上图得,上述代码中会发生编译错误,因obj.num=5;obj.g();都调用了子类扩展的部分。而在Java编译器中,编译器会认为obj为父类类型,如若不是,则发生编译错误。而不是看引用指向的类型

1.5方法中的重写:在继承中,子类可以重写(覆盖)父类的方法,即子类和父类的方法名和参数列表都相同,只是方法体不同而已,当重写方法被调用时,无论是子类或者父类的引用,运行的都是重写后的版本如图下:

由上图,运行结果都是Goo.f()因而,无论子类引用或者父类的引用都指向重写后的方法

1.6重写中使用super关键字:在重写方法中,可用super关键字,调用父类的版本如图下:


由上图得,通过super.f();调用父类方法,常用于在父类的基础上进行扩展

1.7重写和重载的区别

重载:指在一个类中,方法名相同,参数列表不同,编译器在编译时根据参数列表的不同绑定想应的方法

重写:指在子类中,签名相同,即方法名和参数列表都相同,在程序运行时,根据对象的类型绑定相应的方法

如图下:




由上图得:先通过Goo类中进行重载,然后同过obj.f(),进行重写

结果:g(Super)sus.f()


0 0