码迷,mamicode.com
首页 > 其他好文 > 详细

动手动脑2

时间:2018-11-08 00:10:10      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:jvm   允许   结果   bsp   jdk   integer   nat   Stub   静态方法   

---恢复内容开始---

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

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

}

  结果技术分享图片

结论:是第一个语句

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

2

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

答:构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量。子类拥有父的成员变量和成员方法,如果不调用,则从父类继承而来的成员变量和成员方法得不到正确的初始化。

3.

参看ExplorationJDKSource.java示例 此示例中定义了一个类A,它没有任何成员: class A { }

package z;

public class ExplorationJDKSource {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println(new A());
	}

}

class A{}

  技术分享图片

使用javap –c命令反汇编ExplorationJDKSource.class 得:

技术分享图片

结论:

main方法实际是调用了String类的valueOf()方法而valueOf方法内部又调用Object.toString方法:public String toString(){return getClass().getName()+”@”+Integer.toHexString(hashCode());}

hashCode方法是本地方法,由JVM设计者实现:public native int hashCode()。

4.

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

package z;
class person{
    public person()
    {
        System.out.println("A");
    }
}
class me extends person
{
    public me()
    {
        super();
        System.out.println("B");
    }
}
class you extends person{
	public you() {
		super();
		System.out.println("C");
	}
}
public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        me me = new me();
    }

}

  

 技术分享图片

(1)覆盖方法的允许访问范围不能小于原方法。

(2)覆盖方法所抛出的异常不能比原方法更多。

(3)声明为final方法不允许覆盖。 例如,Object的getClass()方法不能覆盖。

(4)不能覆盖静态方法。

 

动手动脑2

标签:jvm   允许   结果   bsp   jdk   integer   nat   Stub   静态方法   

原文地址:https://www.cnblogs.com/zlj843767688/p/9926349.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!