上⽰图例中,虽然⾷草动物和⾷⾁动物都是属于动物,但是两者的属性和⾏为上有所差别,所以⼦类会具有⽗类的⼀般特性也会具有⾃⾝的特性。
java重写和重载的区别
为什么需要继承
从上述代码⽰例来看,代码存在重复了,⽽且后期维护也很⿇烦,⽐如我想给每个动物增加⼀个体重属性,那么每个类都需要加⼀遍,维护性不⾼也容易出错。其实要从根本上解决这两段代码的问题,就需要⽤到继承,我们可以将两段代码中相同的部分抽取出来组成⼀个⽗类。
继承的优点
简⽽⾔之,继承的好处有以下三点:
继承的缺点
那我们该什么时候使⽤继承呢?其实继承体现了我们现实⽣活中is a的关系,即谁是谁的⼀种,例如:⽼虎是动物的⼀种;苹果是⽔果的⼀种等等。
this
可以看到,getColour 成员⽅法⾥的colour是形式参数,lour 是 Car 类的成员变量。
1、this:代表当前对象名(在程序中易产⽣⼆义性之处,应使⽤this来指明当前对象;如果函数的形参与类中的成员变量同名,这时需⽤
this来指明成员变量名)。
2、super:引⽤当前对象的⽗类中的成员变量(当成员变量和⽗类具有相同成员变量时,⽤于访问⽗类中的成员变量或⽅法)。
继承关系中的构造⽅法
前⾯已经学习了继承的概念,也知道了继承是⼦类继承⽗类的特征和⾏为。那么⼦类和⽗类的构造⽅法是否也是继承的关系呢?看下⾯的代
码⽰例:
class Father { //我是⽗类    private String name;    public Father() {        System.out.println("我是⽗类⽆参构造⽅法");    }    public Father(String name) {        System 运⾏结果:
我是⽗类⽆参构造⽅法 我是⼦类⽆参构造⽅法 我是⽗类有参构造⽅法[name]:⼦类调⽤⽗类 我是⼦类有参构造⽅法[name]:⼦类构造参数从上⾯的代码⽰例中可以发现,⼦类是不继承⽗类的构造⽅法的,它只是调⽤(隐式或显式)。
如果⽗类的构造器带有参数并且⼦类要调⽤⽗类有参构造⽅法的话,则必须在⼦类的构造器中显式地通过 super 关键字调⽤⽗类的构造⽅法,并配以适当的参数列表调⽤,否则还是⾃动调⽤⽗类⽆参构造⽅法。
注意:如果⽗类构造⽅法没有参数,则在⼦类的构造⽅法中不需要显式的⽤ super 关键字调⽤⽗类构造⽅法,系统会⾃动调⽤⽗类的⽆参
构造⽅法哦。
⽅法的重写与重载
⼦类继承⽗类,它具备了⽗类的特征和⾏为,⼦类从⽗类那⾥继承⽅法,但⼦类更具体化,可以定义新的特征,当⼦类可以修改从⽗类继承
的⼀些⽅法,进⾏扩展,增⼤功能,程序上常常把这样的⼀种操作⽅法称为⽅法的重写(0veriding),所谓⽅法的重写是指⼦类中的⽅法与⽗
类中继承的⽅法有完全相同的返回值类型、⽅法名、参数个数以及参数类型。
1.⽅法的重写
重写的优点
重写体现了Java的优越性,重写是建⽴在继承关系上,它使语⾔结构更加丰富。在Java中的继承中,⼦类既可以隐藏和访问⽗类的⽅法,
也可以覆盖继承⽗类的⽅法。
重写的规则
在⽅法的重写,需要还遵循以下的规则:
1. ⽗类⽅法的参数列表必须与被⼦类重写的⽅法的参数列表、返回类型完全相同。
2. 被⼦类重写的⽅法不能拥有⽐⽗类⽅法更加严格的访问权限。
3. ⽗类私有⽅法,⼦类⽆法重写。
4. 继承过程中如果⽗类中的⽅法抛出异常,那么在⼦类中重写⽗类的该⽅法时,也要抛出异常。
对于第四点,这⾥要再补充⼀下,⼦类抛出的异常不能多于⽗类中抛出的异常哦,即重写⽅法⼀定不能抛出新的检查异常,并且不能⽐⽗类⽅
法声明更加宽泛的检查型异常(可以等于)。例如,⽗类的⼀个⽅法申明了⼀个IOException异常,在重写这个⽅法时就不能抛出Exception
异常(Exception>IOException)。
2.⽅法的重载
那么什么⼜是⽅法的重载呢?⽅法的重写和重载虽然只相差了⼀个字,但是它们并不是⼀个概念,那么⽅法的重载⼜是怎么定义的?和⽅法
的重写⼜有什么区别呢。
⽅法的重载(Overloading):⽅法重载是指在⼀个类中,多个⽅法的⽅法名相同,但是参数列表不同。参数列表不同指的是参数个数、参数
类型或者参数的顺序不同。
3.⽅法重载和⽅法重写的区别