本帖最后由 虾米吃螃蟹 于 2015-7-13 10:28 编辑
- </blockquote></div><div class="blockcode"><blockquote>public class Example7
- {
-
- public static void main(String [] args){
- Child ch1=new Child();
- System.out.println("分割线————————分割线");
- Child ch2=new Child(3);
- }
- }
- class Child extends Person{
- public Child(){
- super();
- }
- public Child(int b){
- System.out.println("此处为子类:"+b);
- }
- public void func(){
- System.out.println("b,");
-
- }
- }
- class Person{
- public Person(){
- func();
- }
- public Person(int a){
- System.out.println("此处为父类:"+a);
- }
- public void func(){
- System.out.println("a,");
- }
- }
复制代码 输出为:b,
分割线————————分割线
b,
此处为子类:3
当子类Child覆盖(重写)了父类Person中的方法func(),在子类中通过super()引用父类时,输出的为子类的方法。而如果将父类中的无参构造方法删除子类的有参构造方法- public Child(int b){
- System.out.println("此处为子类:"+b);
- }
复制代码 会报错“[backcolor=rgba(255, 255, 255, 0.8)]Implicit super constructor Person() is undefined. [backcolor=rgba(255, 255, 255, 0.8)]Must explicitly invoke another constructor”。因为此处有隐式super()会去调用父类的无参构造方法,而报错。
因此:1、子类的构造方法会有隐式super()去调用父类的无参构造方法,而若父类中没有无参构造方法,程序会报错;
2、当父类没有无参构造方法时,必须在子类构造方法的首行写super(参数)语句;
3、当子类中的方法重写了父类的方法时即例中的func(),通过super()调用父类时,输出为子类的func()
|
|