java---构造器
public class SomeTrying{ public static void main(String[] args){ new Son(); new Son().Father(); } } class Father{ //父类Father的无参构造函数 public Father (){ System.out.println("Father Construtor"); } //父类Father的带参构造函数 ,构造函数不是成员函数,它只代表类本身,所以一个类可以有多个构造函数 public Father (int x){ System.out.println("Father Construtor " + x); } /* 父类Father的成员函数,就是类中的普通函数,所以是不可以重复的,如果再写一个如下, * 编译器会报 Duplicate method Father() in type Father 错误,原因是两个成员函数发生了冲突。 public int Father (){ System.out.println("Father member function"); */ public void Father (){ System.out.println("Father member function"); } } //类son是继承父类Father的子类 class Son extends Father { //在子类的构造函数中调用父类构造函数, public Son (){ super(1); System.out.println("Son Construtor"); } //重写父类的成员函数 public void Father(){ System.out.println("Inherited Father member function."); super.Father(); } }
1、因为类中显式的声明了一个带参数构造器,所以默认的构造器就不存在了,但是你在子类的构造器中并没有显式的调用父类的构造器(创建子类对象的时候,一定会去调用父类的构造器,这个不用问为什么),没有显式调用的话,虚拟机就会默认调用父类的默认构造器,但是此时你的父类的默认构造器已经不存在了,这也就是为什么父类中必须保留默认构造器的原因。
PS.应该养成良好的编程习惯,任何我们自己定义的类,都显式的加上默认的构造器,以后更深入的学习之后,会发现有很多好处
方法重写规则
- 参数列表必须完全与被重写方法的相同;
- 返回类型必须完全与被重写方法的返回类型相同;
- 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
- 父类的成员方法只能被它的子类重写。
- 声明为final的方法不能被重写。
- 声明为static的方法不能被重写,但是能够被再次声明。
- 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
- 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
- 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
- 构造方法不能被重写。
- 如果不能继承一个方法,则不能重写这个方法
参考:http://www.runoob.com/java/java-override-overload.html
http://blog.csdn.net/yuxiaohui78/article/details/43887373
http://www.cnblogs.com/by-dream/p/3967123.html