首页 > 代码库 > 第七讲继承与接口动手实验和动手动脑

第七讲继承与接口动手实验和动手动脑

【动手实验一】

继承条件下的构造方法调用

  • 运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大!

结论:通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。

TestInherits.java

class Grandparent {

 

    public Grandparent() {

        System.out.println("GrandParent Created.");

    }

 

    public Grandparent(String string) {

        System.out.println("GrandParent Created.String:" + string);

    }

}

 

class Parent extends Grandparent {

 

    public Parent() {

        //super("Hello.Grandparent.");

        System.out.println("Parent Created");

       // super("Hello.Grandparent.");

    }

}

 

class Child extends Parent {

 

    public Child() {

        System.out.println("Child Created");

    }

}

 

public class TestInherits {

 

    public static void main(String args[]) {

        Child c = new Child();

    }

}

实验结果截图:

技术分享 

 

【动手动脑一】

“方法覆盖(override)”的要点

  • 方法覆盖要求子类与父类的方法一模一样,否则就是方法重载(overload)!
  • 请自行编写代码测试以下特性(动手动脑):
    • 在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。

1、实验代码:TestInherit.java

//自行编写代码测试以下特性(动手动脑):在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。

//ZhaoXuan Li,November 10th,2016.

 

class Father

{

       public void multiplication(double a,double b)

       {

              System.out.println("父类的函数:"+a+"*"+b+"="+a*b);

       }

}

 

class Me extends Father

{

       public void multiplication(double a,double b)

       {

              super.multiplication(a+1, b+2);

              System.out.println("父类的函数:"+a+"*"+b+"="+a*b);

 

       }

}

 

public class TestInherit

{

       public static void main(String[] args)

       {

              Me a=new Me();

              a.multiplication(1,1.2);

       }

}

结果截图:

 技术分享

第七讲继承与接口动手实验和动手动脑