继承和多态之动手动脑

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());
    }
}

原文地址:https://www.cnblogs.com/quxiangjia/p/9890540.html