继承
java三大特性之一,使用继承,可以把大家相同的一些属性和方法放到一个类里面。继承是代码重用的一种方式。在java中,通过extends实现继承,每个类只能有一个直接父类。
在java中,子类可以从父类中继承一下内容:
1、可以继承public和protected修饰的属性和方法,不论子类和父类是否在一个包中。
2、可以继承默认访问修饰符修饰的属性和方法,但此时子类必须和父类在一个包中。
(以上两点跟访问修饰符的限制有关)
3、无法继承父类的构造方法。
问题
问题:在继承父类的时候,属性真的继承了吗?
在父类封装之后,属性私有,不能继承,只能通过公有的set/get方法来改变属性值。
问题:当子类继承父类之后,子类在构造时是先调用的谁的构造方法?
先调用父类的构造方法。
super
1、super只能出现在子类的方法和构造方法中。super本身的作用就是用来调用父类的方法的。
2、super调用构造方法时,只能是第一句。在普通方法中,可以不是第一句。
3、super不能访问父类的private成员。
继承条件下的构造方法调用规则
当在java语言中创建一个对象时,java虚拟机会按照父类-子类的顺序执行一系列的构造方法,子类继承父类时构造方法的调用规则如下:
1、如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。
2、如果子类的构造方法通过super调用了父类的有参构造方法,那么将执行父类相应的构造方法,而不执行父类的无参构造方法。
注:在类中没有提供任何构造方法时,系统会提供一个无参的方法体为空的默认构造方法。一旦提供了自定义构造方法,系统将不再提供这个默认构造方法。如果要使用他,程序员必须手动添加。
重写toString与equals方法
这两个方法都是Object里面的方法,由于Object类是所有类的父类,所以可以在其任何子类中重写这两个方法。