一、重写父类方法的权限。
在父类中,可能对某个方法设置了相关的权限。如对某个方法设置了protected权限,只允许其子类来访问这个方法,其他类不能够访问这个方法。不过跟现实中一样,有些儿子总是比较叛逆,或者说总会有几个“败家子”,他们会把家里的东西拿出去给别人使用。子类继承了父类之后,可以修改父类对象中的权限访问限制。如将protected权限(只允许子类中访问,而不允许其他类访问)更改为public访问权限。更改后子类中的这个方法所有类都可以访问。这就相当于将子类中家传的方法(本来可能是传子不传女的),向其他类公开。其他类可以随意的访问。
不过子类在更改父类方法的时候,有一个限制条件,即修改方法的修饰权限只能够从小的范围到达的范围改变。如在父类中,如果某个方法的权限修饰词位protected,则子类中重写这个方法时,其如果需要修改权限,则只能够改为public,而不能够改为private,越改越小。笔者在学习时,是按如下方法理解的。时代在进步,做儿子的要越来越大方,总不能比父亲小气吧。如此的话,这个权限修改的原则必须从小的范围到大的范围的改变,就会牢牢的记住了,想忘也忘不了了。其实在Java语言中,有很多类似的原则,大家都可跟日常生活联系起来记忆。这即能够帮助大家理解这些原则,而且也容易记忆。 在Java中产生随机数的两个方法
二、引用父类中的方法。
父亲与儿子是一家人,住在同一个屋檐下。那么儿子当然可以利用父亲的一些工具了。如可以使用父亲的螺丝刀、自行车等工具。而不需要征得父亲的同意。如果某个类继承了另外一个类之后,子类也可以不经过父类同意而引用父类中方法。如在子类中可以连同初始化父类构造方法来完成子类的初始化操作。即可以在子类的构造方法中使用super()语句来调用父类的构造方法,也可以在子类中使用super关键字调用父类的成员方法。注意这些方法并不是说在子类中重新创建,而是引用。就好像自行车,其只有一辆。做儿子的只是借用而已。如果删除父类中的方法,那么在子类中就无法引用这个方法,因为引用的对象已经不存在了。从这也可以看出,父类与子类其实共享一个方法。除非在子类中对这个方法进行了重写或者重构。
不过有时候做父亲的也会比较自私,有些东西可能不想让儿子用。如可能有一些家传的古董之类的,怕儿子损坏,就锁在柜子中,不给儿子使用。在Java类的继承中,也存在这种情况。通常情况下,子类可以调用父类中的所有方法。但是如果父类不想让子类调用某个方法的话,在可以将这个方法的权限设置为private。此时即使通过继承手段创建了子类,但是这个子类仍然无法调用父类中利用private关键字修饰的方法。这就好像做父亲的给这个方法加了个锁,不想让儿子看到或者使用。注意,只有给方法设置为private关键字,其才不能够被子类调用。但是,如果设置了protected关键字,虽然其他类无法访问,但是子类仍然可以访问。为此在编写父类的方法时,需要注意关键字protected与关键字private的区别。在合适的方法前面采用合适的关键字。This关键字在Java语言中的应用
三、重写或者重构父类的方法。
作为子类并不是简单的扩展父类的功能。就像做儿子一样,并不是简单的继承父亲的特征。生长环境、教育环境的不同,做父亲的总有与儿子不同的地方。在子类中,可以通过三种方法来“青处于蓝,而胜于蓝”。
一是在子类中可以创建父类没有的方法。这是在子类中对父类的最简单的扩展。就好像父亲不会开车,而儿子可以通过学习学会开车取得驾照一样,在子类中可以定义父类中没有的方法。从而实现扩展父类的功能。不过在子类中定义方法的时候,名字不能够与父类的方法名字相同。不然的话,不是叫做创建父类没有的方法了,而是叫做重写方法或者方法重构。为此在子类中定义新方法名字的时候,就多了一个限制,即不能够与父类中的方法名字相同。否则的话,会出现难以预料的结果。不过如果不是从其他类中继承,即不是子类的话,则就没有这方面的限制,即可以跟其他类中的方法名字相同。因为独立的类中,其是根据对象名与方法名来组合来唯一的定位一个方法。总而言之,如果在子类中只是新加了一个方法,而不想影响父类中原先方法调用的话,则必须保证子类方法的名字与父类方法的名字不会有冲突。