zoukankan      html  css  js  c++  java
  • 动手动脑

    一、动手实验:继承条件下的构造方法调用

    代码

     1 class Grandparent 
     2 {
     3 
     4 
     5     public Grandparent()
     6      {
     7 
     8             System.out.println("GrandParent Created.");
     9     
    10 }
    11 
    12 
    13     public Grandparent(String string) 
    14     {
    15 
    16             System.out.println("GrandParent Created.String:" + string);
    17     
    18  }
    19 
    20 }
    21 
    22 
    23 
    24 class Parent extends Grandparent
    25 {
    26 
    27 
    28     public Parent()
    29      {
    30 
    31             //super("Hello.Grandparent.");
    32 
    33             System.out.println("Parent Created");
    34     
    35        // super("Hello.Grandparent.");
    36 
    37       }
    38 
    39 }
    40 
    41 
    42 
    43 class Child extends Parent 
    44 {
    45 
    46 
    47     public Child()
    48      {
    49     
    50         System.out.println("Child Created");
    51 
    52       }
    53 
    54 }
    55 
    56 
    57 
    58 public class Text 
    59 {
    60 
    61 
    62     public static void main(String args[])
    63      {
    64 
    65             Child c = new Child();
    66     
    67   }
    68 
    69 }

    运行结果:

    GrandParent Created.
    Parent Created
    Child Created

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

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

    代码

     1 class Father
     2 {
     3        public void multiplication(double a,double b)
     4        {
     5               System.out.println("父类的函数:"+a+"*"+b+"="+a*b);
     6        }
     7 }
     8  
     9 class Me extends Father
    10 {
    11        public void multiplication(double a,double b)
    12        {
    13               super.multiplication(a+1, b+2);
    14               System.out.println("父类的函数:"+a+"*"+b+"="+a*b);
    15  
    16        }
    17 }
    18  
    19 public class TestInherit
    20 {
    21        public static void main(String[] args)
    22        {
    23               Me a=new Me();
    24               a.multiplication(1,1.2);
    25        }
    26 }

    三、   左边的程序运行结果是什么?
      你如何解释会得到这样的输出?
      计算机是不会出错的,之所以得
      到这样的运行结果也是有原因的,
      那么从这些运行结果中,你能总
      结出Java的哪些语法特性?

    当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。
    这个特性实际上就是面向对象“多态”特性的具体表现。

    如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。
    如果子类被当作父类使用,则通过子类访问的字段是父类的!
    牢记:在实际开发中,要避免在子类中定义与父类同名 的字段。不要自找麻烦!——但考试除外,考试 中出这种题还是可以的。

  • 相关阅读:
    CentOS7安装mysql-8
    zabbix监控规划及实施
    集群技术
    自动化脚本-配置LVS(DR模式)
    Pacemaker+ISCSI实现Apache高可用-配置
    创建集群corosync
    我的第一个python程序——猜数字
    质量报告
    新需求测试与回归测试
    冒烟测试
  • 原文地址:https://www.cnblogs.com/xueqiuxiang/p/11728753.html
Copyright © 2011-2022 走看看