Java的三大特性之一继承
昨天自己复习继承的内容,所以写下记录,如果有不对的请指出,我猪肉佬感激不尽。
继承概念
在已知类的基础上创建新类,新类可以创建新的属性方法,也可以继续使用父类的方法;
有几点要注意:
- 子类继承父类,拥有父类所有方法和属性,但是父类中用private修饰的,仅仅是拥有,不能使用;打个比喻,就是儿子继承父亲的家产,父亲所有的东西都给儿子,钱啊,房子啊儿子都可以用,都是儿子的,可是!父亲自己私人的东西只能自己用,儿子只能有,但是不能用,至于什么东西,我现在还没想到。
- 子类创建属于自己方法和属性,这也是对父类的拓展,代码的扩展;
- 子类可以通过自己的方式重写父类的方法;
不得不提的抽象和接口
先说说抽象类,抽象,就是一个事物的概念的描述,打个比喻:人!人有的共同的描述肤色,头发,五官,身高等等基本信息;抽象类用abstract修饰类,如果一个类中有抽象方法,那么这个类也是抽象类。抽象类和普通类的最大区别是不能实例化,为什么?抽象类可以有非抽象的方法,例如构造方法,有构造方法就可以实例化了呀,为什么不行?!这个真不行,不信你自己试试new它一下,Java在设计的时候就是为了继承而设计。抽象类的目的就是为实现多态中的共同点,抽象类的构造器会在子类实例化时调用,因此它也是用来实现多态中的共同点构造。打个比喻:你要去买水果,但是具体买什么水果,你不知道啊。所以抽象类不可以实例化。
然后是接口,在Java8之前接口时完全的抽象类,Java8之后就不同了,升价了,有面了。接口和抽象类一样,不能实例化;接口的方法和属性默认时public修饰,不能用private 和 protect 修饰,如果你私藏保护,不给人实现这个方法,那么创建这个方法就没有意义。接口的属性是static+ final 修饰,也就是接口不能有自己成员变量。
总结:
不同点:
- 抽象类是继承的,接口是实现的。继承只能单继承,接口可以实现多个;
- 抽象类可以有抽象方法和非抽象方法;接口不能有实现方法;
- 接口不能有成员变量,抽象类可以有抽象变量;
- 接口的修饰符只能是public,抽象类可以是其他修饰符;
相同点:
- 抽象类和接口都是不可以实例化的,只能由子类继承实现;
super关键字
子类继承父类,子类的初始化必须调用父类的构造方法,super调用父类的构造方法,从而完成初始化操作。
子类如果想调用父类的其他方法,也可以使用super调用;
重写和重载区别
重写(Override)
重写发生在父类和子类之间,两个类之间,为了满足l里氏替换原则,子类要注意几点:
- 子类重写方法访问修饰符必须要等于或大于父类方法;
- 子类方法的返回值必须是父类方法返回值类型或其子类型;
- 子类方法抛出的错误必须是父类抛出异常类型或为其子类型;
- 重写的方法,方法名,参数类型,参数个数也必须和父类方法一致;
重载(Overload)
重载发生在同一个类中,要求必须是方法名相同,但是参数类型,个数不同,要注意的是,返回值类型并不重要,虚拟机不会因为返回值类型不同而区分出两个方法;
链接
链接: 深入了解抽象类和接口.