zoukankan      html  css  js  c++  java
  • 继承与接口动手动脑

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

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

    package Test1;
    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("1233");
    		System.out.println("Parent Created");
    	}
    }
    class Child extends Parent{
    	public Child(){
    		System.out.println("Child Created");
    	}
    }
    public class Test1 {
    public static void main(String[]args){
    	Child c=new Child();
    
    	
    }
    }

    实验结果为:

    通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。若不是第一个将会出现编译错误。

    super的用法:

    (1)调用父类的构造方法。

    (2)操作被隐藏的成员变量和被覆盖的成员方法

    语法格式为:

    super.成员变量名

    super.成员方法名([参数列表]

    2.为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来?

    构造函数是一种特殊的方法 。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。构造函数的功能主要用于在类的对象创建时定义初始化的状态。所以说构造函数的作用,简单来说就是初始化,初始化一个新建的对象。子类继承父类后默认继承父类的构造函数不能,因为这个方法由系统直接调用。

    3.参看ExplorationJDKSource.java示例

    此示例中定义了一个类A,它没有任何成员:

    class A { }

    示例直接输出这个类所创建的对象

    public static void main(String[] args)    {

    System.out.println(new A());

    }

    得到了如下的结果:

     

    main方法实际上调用的是:

    public void println(Object x),这一方法内部调用了String类的valueOf方法。

    valueOf方法内部又调用Object.toString方法:

    public String toString() {

      return getClass().getName() +"@" + Integer.toHexString(hashCode());

    }

    4.我们来看一段代码(示例Fruit.java ):

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

    注意最后一句,一个字串和一个对象“相加”,得到以下结果:

    Fruit类覆盖了Object类的toString方法。在“+”运算中,当任何一个对象与一个String对象,连接时,会隐式地调用其toString()方法,默认情况下,此方法返回“类名 @ + hashCode”。为了返回有意义的信息,子类可以重写toString()方法。

    5.

    package Animal;
    
    
    class test1
    {
    public void say(){
    System.out.println("我是动物!");
    }
    }
    class test2 extends test1
    {
    public void say(){
    System.out.println("我住在动物园!");
    }
    public void say1()
    {
    super.say();
    }
    }
    public class Anima {
    
    
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    test2 t=new test2();t.say1();
    t.say();
    
    }
    
    
    }
    

      

  • 相关阅读:
    POJ 3140 Contestants Division (树dp)
    POJ 3107 Godfather (树重心)
    POJ 1655 Balancing Act (树的重心)
    HDU 3534 Tree (经典树形dp)
    HDU 1561 The more, The Better (树形dp)
    HDU 1011 Starship Troopers (树dp)
    Light oj 1085
    Light oj 1013
    Light oj 1134
    FZU 2224 An exciting GCD problem(GCD种类预处理+树状数组维护)同hdu5869
  • 原文地址:https://www.cnblogs.com/1998lu/p/6051540.html
Copyright © 2011-2022 走看看