面对对象的三个基本特征(继承)(构造方法)

来源:互联网 发布:mac爱奇艺没弹屏了 编辑:程序博客网 时间:2024/06/03 13:33

构造方法:

构造方法也叫构造器,

当一个对象被创建时候,构造方法用来初始化该对象。

构造方法和它所在类的名字相同,但构造方法没有返回值

通常会使用构造方法给一个类的实例变量赋初值,或者执行其它必要的步骤来创建一个完整的对象。

不管你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个默认构造方法,它把所有成员初始化为0。

一旦你定义了自己的构造方法,默认构造方法就会失效。

构造方法不能被static、final、synchronized、abstract、native修饰。


百度上的解释为:

一个类被实例化也就是被new的时候最先执行的是构造函数,如果你有留心。你会发现很多类里面根本没有写构造函数。
在java类中,如果不显示声明构造函数,JVM(Java Virtual Machine(Java虚拟机) 会给该类一个默认的构造函数。一个类 可以有多个构造函数。构造函数的主要作用 一是用来实例化该类。二是 让该类实例化的时候执行哪些方法,初始化哪些属性。当一个类声明了构造函数以后,JVM 是不会再给该类分配默认的构造函数。


没有参数的构造方法又叫缺省构造方法

下面是一个使用缺省构造方法的例子:

// 一个简单的构造函数class MyClass {  int x; // 以下是构造函数  MyClass() {    x = 10;  }}

可以像下面这样调用构造方法来初始化一个对象:

public class Way {   public static void main(String args[]) {      MyClass t1 = new MyClass();      MyClass t2 = new MyClass();      System.out.println(t1.x + " " + t2.x);   }}
大多时候需要一个有参数的构造方法。

// 一个简单的构造函数class MyClass {  int x;   // 以下是构造函数  MyClass(int i ) {    x = i;  }}
初始化对象

public class Test {  public static void main(String args[]) {    MyClass t1 = new MyClass( 10 );    MyClass t2 = new MyClass( 20 );    System.out.println(t1.x + " " + t2.x);  }}


子类调用父类的构造方法

父类的构造方法不能被子类继承。子类不能直接通过方法名调用父类的一个构造方法,而是要通过super关键字调用父类的一个构造方法,

super语句必须位于子类构造方法的第一行

来看个例子

package helloJava;class GrandPa{public GrandPa()//这是定义的构造方法,不是默认的构造方法{System.out.println("default GrandPa");}public GrandPa(String name){System.out.println(name);}}class Father extends GrandPa{public Father(){System.out.println("default Father");}public Father(String grandPaName,String fatherName){super(grandPaName);//对GrandPa有参构造方法的调用System.out.println(fatherName);}}public class Son extends Father{public Son(){System.out.println("default Son");}public Son(String grandPaName,String fatherName,String sonName){super(grandPaName,fatherName);//对Father有参构造方法的调用System.out.println(sonName);}public static void main(String args[]){Son s1=new Son();Son s2= new Son("My GrandPa", "My Father", "My Son");}}

考察要点

l 识别合法的构造方法;
2 构造方法可以被重载,一个构造方法可以通过this关键字调用另一个构造方法,this语句必须位于构造方法的第一行;
3 当一个类中没有定义任何构造方法,Java将自动提供一个缺省构造方法;
4 子类通过super关键字调用父类的一个构造方法;
5 当子类的某个构造方法没有通过super关键字调用父类的构造方法,通过这个构造方法创建子类对象时,会自动先调用父类的缺省构造方法
6 构造方法不能被static、final、synchronized、abstract、native修饰,但可以被public、private、protected修饰;
7 构造方法不是类的成员方法;
8 构造方法不能被继承。


阅读全文
0 0
原创粉丝点击