java实验3.(2)基类,子类的初始化顺序

初始化顺序(InitTest.java)

构造函数适用于对象初始化的,建立对象时会立即执行构造函数(constructor),如果没有定义构造函数,系统会自动生成一个默认的构造函数并执行。除了在构造函数中初始化建立对象时还可以直接对成员变量进行初始化。

(1)编译和运行InitTest.java,并根据程序和运行结果说明下面建立对象的初始化顺序:

运行代码如下:

class Shape{
  String color = "black";
  Shape(){
    System.out.println("基类无参构造函数(成员变量已初始化):Shape color is "+color);
  }
  Shape(String color){
    this.color = color;
    System.out.println("基类有参构造函数(成员变量已初始化):Shape color is " + color);
  }
  void draw(){
    System.out.println("基类的draw()函数:Shape is drawn! ");
  }
}

class Circle extends Shape{
  int radius=10;
  double area;
  {                            // 用块(block)进行初始化
    area = Math.PI * radius * radius;
	System.out.println("子类的块初始化");
   }
  Circle(String color){
    //super(color);              // 调用基类构造器(有参数)
    System.out.println("子类的有参构造函数(成员变量已初始化):Radius = " 
                      + radius + " 快内的初始化:Area = " + area);
  }  
 
  void draw(){
    //super.draw();		// super用于调用基类的同名方法
    System.out.println("子类的darw()函数:Circle is drawn!");
  }
}

public class InitTest {
  InitTest(){
     Circle circle = new Circle("red");
     circle.draw();
  }
  public static void main(String[] args){
     InitTest init = new InitTest();
     System.out.println("finish!");        
  }
}

运行结果如下:

基类无参构造函数(成员变量已初始化):Shape color is black
子类的块初始化
子类的有参构造函数(成员变量已初始化):Radius = 10 快内的初始化:Area = 314.1592653589793
子类的darw()函数:Circle is drawn!
finish!

说明初始化顺序为:

基类直接执行变量初始化

 基类构造函数

导出类的块初始化

导出类直接执行变量初始化

导出类构造函数

(2)super用于调用基类的方法或成员变量。依次去掉两个super的注释,编译执行后通过观察结果,说明它们的功能和增加第一个super引起变化。

Super的作用是能够提供继承的子类,通过它去调用其基类的构造函数或者方法。

去除第一个super的注释前后:

基类有参构造函数(成员变量已初始化):Shape color is red
子类的块初始化
子类的有参构造函数(成员变量已初始化):Radius = 10 快内的初始化:Area = 314.1592653589793
子类的darw()函数:Circle is drawn!
finish!
可以看到,调用了基类的有参构造函数,color变成了黑色

去除第二个super的注释前后变化:
基类有参构造函数(成员变量已初始化):Shape color is red
子类的块初始化
子类的有参构造函数(成员变量已初始化):Radius = 10 快内的初始化:Area = 314.1592653589793
基类的draw()函数:Shape is drawn!
子类的darw()函数:Circle is drawn!
finish!
调用了基类的draw()函数。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值