java编程思想学习(初始化顺序)

1.static 与final
  static的数据保证只保存一份,如果基类和子类共享static变量,因为都存储在方法区中。
  final 修饰成员变量、方法和类
2.构造函数里面的多态行为
class Glyph{
   void draw (){
      System.out.println("Glyph.draw()");
   }
   Glyph(){
      System.out.println("before Glyph draw");
      draw();
      System.out.println("after Glyph draw");
   }
}

class RoundGlyph extends Glyph{
   private int radis=1;
   RoundGlyph(int r){
      radis = r;
      System.out.println("RoundGlyph(),radis=" +radis );
   }
   void draw(){
      System.out.println("draw(),radis=" +radis );
   }
}
public class PolyConstructor {
   public static void main(String args[]){
      new RoundGlyph(5);
   }

}

输出结果为:
before Glyph draw
draw(),radis=0
after Glyph draw
RoundGlyph(),radis=5

  在任何事物发生之前,将分配给对象的存储空间初始化成二进制的零。
  调用基类的构造器。(是在子类的成员变量被初始化之前)
  按照声明顺序初始化子类成员变量
  调用子类的构造函数

3.协变返回类型
  表示导出类的被覆盖方法可以返回基类方法返回的类型的某种导出类型
4.基类与子类的构造函数执行先后关系
   初始化顺序。static的会最先被执行,因为这是在任何对象构造之前就初始化完毕。
   基类的成员变量,基类的构造函数
   子类的成员变量,子类的构造函数。
   因为在导出类中,必须假定基类的所有成员都是有效的。在构造器内部,我们必须确保所有要使用的成员都已经构建完毕。

你可能感兴趣的:(java,编程)