关于子类和父类之间的方法,构造方法调用关系
子类继承了父类之后,父类的所有方法都可以被子类调用,父类的所有(除私有外)方法都可以被重写;
但是父类中私有数据域不能在子类中被修改,只能通过调用父类的公共修改方法来修改;
例如下面圆几何继承了简单几何:
以上几点说明:
简单几何类中的构造方法其实不需要写,因为就算其他类想设置简单几何类的私有数据域,可以通过setget方法来获得,所以完全是多余的;
(子类继承也叫做拓展,顾名思义,拓展那些在父类中数据域和方法,子类在父类本身的基础上,还能够再添加自己的多样性,添加了自己的方法和数据域)
圆几何类拓展了简单几何类,除了设置自己的数据域半径,还可以通过调用set方法引用父类的私有数据域,这样就对父类的拓展;除了数据域拓展,圆几何类还拓展了求圆面积的方法;(可拓展数据域和方法)
那如何使用这个子类对象呢?
由上可知:继承了父类的圆几何类对象,能调用父类(除了private修饰的方法,只能在父类中调用)和子类中的方法;
一个父类能被多个子类继承,一个子类只能继承一个父类,想多重继承可通过接口实现;
构造方法链:
构造方法时注意:若A继承了B,而A中没有自己的构造方法(管这叫做显示定义构造方法),则会隐式调用B中的无参构造(编译器会自动添加super语句),若B中只有有参构造方法,就不会自动添加无参构造方法,会导致编译错误,所以每一个类中最好带一个无参构造方法,但是如果忘记写构造方法,会自动写一个空的无参构造方法;如下所示:
下面是构造方法链示例:
也就是说当A继承了B,B继承了C。A中new了一个对象,则先会调用A中的无参构造;而A是B的子类,A所有的构造方法执行之前,B中的无参构造方法要先执行;又因为B是C的子类,B所有的构造方法执行之前,C中的无参构造方法要先执行;