JAVA技术专题综述之构造方法篇

拼未来33

拼未来33

2016-02-19 14:34

人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的JAVA技术专题综述之构造方法篇懂设计的网友们快点来了解吧!
类的继续机制使得子类可以使用父类的功能(即代码),并且子类也具有父类的类型。下面介绍类在继续关系上的初始化的顺序问题。
  
  示例1:
  

   

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)class SuperClass
  {
  SuperClass()
  {
  System.out.println("SuperClass constrUCtor");
  }
  }
  public class SubClass extends SuperClass
  {
  SubClass()
  {
  System.out.println("SubClass constructor");
  }
  public static void main(String[] args)
  {
  SubClass sub = new SubClass();
  }
  }
  输出结果: SuperClass
  constructor
  SubClass constructor
  在子类中只实例化了一个子类对象。从输出结果上看,程序并不是一开始就运行自己的构造方法,而是先运行其父类的默认构造方法。注重:程序自动调用其父类的默认构造方法。
  
  示例2:
  
  class SuperClass
  {
  SuperClass(String str)
  {
  System.out.println("Super with a string.");
  }
  }
  public class SubClass extends SuperClass
  {
  SubClass(String str)
  {
  System.out.println("Sub with a string.");
  }
  public static void main(String[] args)
  {
  SubClass sub = new SubClass("sub");
  }
  }
  在JDK下编译此程序不能成功。正如上例中说的:程序在初始化子类时先要寻找其父类的默认构造方法,结果没找到,那么编译自然不能通过。
  
  解决这个问题有两个办法:
  
  1.在父类中增加一个默认构造方法。
  2.在子类的构造方法中增加一条语句:super(str); 且必须在第一句。
  
  这两种方法都能使此程序通过编译,但就本程序来说运行结果却不相同。
  
  第1种方法的运行结果是:
  
  Sub with a string.
  
  第2种方法的运行结果是:
  
  Super with a string.
  Sub with a string.
  第2种解决方法实际上是指定编译器不要寻找父类的默认构造方法,而是去寻找带一个字符串为参数的构造方法。
  
     下面介绍对象的初始化顺序问题。
  
  示例3:
  
  class One
  {
  One(String str)
  {
  System.out.println(str);
  }
  }
  class Two
  {
  One one_1 = new One("one-1");
  One one_2 = new One("one-2");
  One one_3 = new One("one-3");
  Two(String str)
  {
  System.out.println(str);
  }
  }
  public class Test
  {
  public static void main(String[] args)
  {
  System.out.println("Test main() start...");
  Two two = new Two("two");
  }
  }
  输出结果:
  Test main() start...
  one-1
  one-2
  one-3
  two
  在main()方法中实例化了一个Two类的对象。但程序在初始化Two类的对象时,并非先调用Two类的构造方法,而是先初始化Two类的成员变量。这里Two类有3个成员变量,它们都是One类的对象,所以要先调用3次One类的相应的构造方法。最后在初始化Two类的对象。
  
  示例4:
  
  class One
  
  {
  One(String str)
  {
  System.out.println(str);
  }
  }
  class Two
  {
  One one_1 = new One("one-1");
  One one_2 = new One("one-2");
  static One one_3 = new One("one-3");
  Two(String str)
  {
  System.out.println(str);
  }
  }
  public class Test
  {
  public static void main(String[] args)
  {
  System.out.println("Test main() start...");
  Two two_1 = new Two("two-1");
  System.out.println("------------");
  Two two_2 = new Two("two-2");
  }
  }
  输出结果:
  Test main() start...
  one-3
  one-1
  one-2
  two-1
  ------------
  one-1
  one-2
  two-2
  假如一个类中有静态对象,那么它会在非静态对象前初始化,但只初始化一次。非静态对象每次调用时都要初始化。
  
展开更多 50%)
分享

猜你喜欢

JAVA技术专题综述之构造方法篇

编程语言 网络编程
JAVA技术专题综述之构造方法篇

JAVA专题技术综述之线程篇

编程语言 网络编程
JAVA专题技术综述之线程篇

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

2004开发技术年度综述之Java世界

Java JAVA基础
2004开发技术年度综述之Java世界

200开发技术年度综述之Windows开发

编程语言 网络编程
200开发技术年度综述之Windows开发

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Authorware实战开发专题之ActiveX技术的应用

设计软件 平面设计软件 广告设计软件
Authorware实战开发专题之ActiveX技术的应用

IOS之构造方法与自定义构造方法的区别与实现

编程语言 网络编程
IOS之构造方法与自定义构造方法的区别与实现

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

为什么Java中继承是有害的二

为什么Java中继承是有害的二

应用CSS样式表技巧两则

应用CSS样式表技巧两则
下拉加载更多内容 ↓