`
只帅一次
  • 浏览: 32508 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java编程思想练习题-第7章练习3,4,5-子类基类

阅读更多

题目1:证明,即使不为子类创立构造器,编译器也会为你合成一个默认的构造器,该构造器将调用基类的构造器。

package iteye;
public class child extends father {
	public static void main(String []args)  {  
		child c=new child();
	}
 }

 class father {
	public   father(){
		System.out.println("I am father's constructor");
	}
	
}

 输出:

I am father's constructor

 题目2:证明基类构造器(a)总会被调用;(b)在导出类构造器之前被调用

package iteye;
public class child extends father {

       public   child(){
		System.out.println("I am child's constructor");
	}

	public static void main(String []args)  {  
		child c=new child();
	}
 }

 class father {
	public   father(){
		System.out.println("I am father's constructor");
	}
	
}

 输出为:

I am father's constructor
I am child's constructor

 题目3:创建两个带有默认构造器的类A和类B。从A中继承产生一个名为C的新类,并在c内创建一个B类成员,不要给C编写构造器,创建一个C类的对象并且观察结果。

package iteye;
public class C extends A {
	B b=new B();
	public static void main(String []args)  {  
		C c=new C();
	}
 }

 class A {
	public   A(){
		System.out.println("I am A's constructor");
	}
}
 class B {
		public   B(){
			System.out.println("I am B's constructor");
		}
		
	}

 输出为:

I am A's constructor
I am B's constructor

 这是一个最简单的demo,但是这个demo涉及到类加载顺序的问题。

加载流程是这样的:

(1)入口方法是C类的main方法,运行之前需要把C类加载进内存,加载的时候发现C类继承自父类A所以要先把A类加载进内存。所以第一步是初始化A类的类变量和静态块。

(2)初始化C类的类变量和静态块。

(3)执行main函数

(4)第一行是创建一个C的实例,先初始化A的实例变量

(5)调用A的构造函数

(6)初始化C的实例变量

(7)调用C的构造函数

2
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics