• 继承和多态之动手动脑


    1.

    package cs4;
    
    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.");
    
          }
        public Parent(String string) {
            super("孙子们好!");
            System.out.println("Parent Created.String:"+string);
        }
    
    }
    
    
    
    class Child extends Parent 
    {
    
    
        public Child()
         {
    //        super("儿子们好!"); 
            System.out.println("Child Created");
    //        super("儿子们好!"); 
    
          }
    
    }
    
    
    
    public class TestInherits 
    {
    
    
        public static void main(String args[])
         {
    
                Child c = new Child();
        
      }
    
    }

    当调用超类时,如果代码不是第一行,则会报错,原因是先有基类,再生成子类,其次构造方法的作用是对象的初始化,所以必须先初始化基类,才能初始化子类。

    所以得到结论,在子类的构造方法调用超类时,调用语句必须放在子类构造方法类的第一行

    2.

    package cs4;
    
    class A{
        
    }
    public class ExplorationJDKSource {
    public static void main(String[] args) {
        System.out.println(new A());
    }
    
    }

    直接输出类的对象时,由于我没有覆盖toString这个方法,所以继承object里面的方法,所以输出结果是

    类名+@+随机字符

    3.在子类中,若要调用父类中被覆盖的方法,可以使用super关键字

    package cs4;
    
    public class Fruit
    {
            
        public String toString()
        {
            return "Fruit toString.";
        }
    public String FathertoString() {
        return super.toString();
    }
        public static void main(String args[])
        {
            Fruit f=new Fruit();
            System.out.println("f="+f);
    //        System.out.println("f="+f.toString());
            System.out.println(f.FathertoString());
        }
    }

  • 相关阅读:
    ABB机器人 带参数例行程序
    面试题10- I:斐波那契数列(C++)
    面试题39:数组中出现次数超过一半的数字(C++)
    面试题50:第一个只出现一次的字符(C++)
    第八部分 表的基本操作
    第七部分 表中数据的基本操作
    面试题18:删除链表的节点(C++)
    面试题35:复杂链表的复制(C++)
    面试题54:二叉搜索树的第k大节点(C++)
    面试题62:圆圈中最后剩下的数字(C++)
  • 原文地址:https://www.cnblogs.com/quxiangjia/p/9890540.html
Copyright © 2020-2023  润新知