『壹』 多態父類引用指向子類對象的時候,構造方法是怎麼調用
先調用父類的構造方法,然後再調用子類的構造方法,最後將子類的對象賦值給父類。你可以使用F11單步調試,可以很清楚的看清程序執行的過程。
給你個例子,你單步調試看看:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 多態 {
class Program {
static void Main(string[] args) {
Person p = new Student();
}
}
public class Person {
public Person() {
Console.WriteLine("111");
}
}
public class Student : Person {
public Student() {
Console.WriteLine("222");
}
}
}
『貳』 一個內部類中如何調用構造方法
構造方式只有在new對象的時候被調用。它是無法用對象去調用的!
也就是說你想在內部類實現外部類或者的構造方法被構造,呢只有創建該類的對象了。
『叄』 Java 里的構造方法怎麼理解怎麼定義變數,怎麼調用
構造方法:
構造方法/函數 ,是一種特殊的方法 。主要用來在創建對象時初始化對象, 即為對象成員變數賦初始值,總與new運算符一起使用在創建對象的語句中 。特別的一個類可以有多個構造函數 ,可根據其參數個數的不同或參數類型的不同來區分它們 即構造函數的重載。
構造函數的特點編輯
1.構造函數的命名必須和類名完全相同。在java中普通函數可以和構造函數同名,但是必須帶有返回值;
2.構造函數的功能主要用於在類的對象創建時定義初始化的狀態。它沒有返回值,也不能用void來修飾。這就保證了它不僅什麼也不用自動返回,而且根本不能有任何選擇。而其他方法都有返回值,即使是void返回值。盡管方法體本身不會自動返回什麼,但仍然可以讓它返回一些東西,而這些東西可能是不安全的;
3.構造函數不能被直接調用,必須通過new運算符在創建對象時才會自動調用;而一般的方法是在程序執行到它的時候被調用的;
4.當定義一個類的時候,通常情況下都會顯示該類的構造函數,並在函數中指定初始化的工作也可省略,不過Java編譯器會提供一個默認的構造函數.此默認構造函數是不帶參數的。而一般的方法不存在這一特點;
5.當一個類只定義了私有的構造函數,將無法通過new關鍵字來創建其對象,當一個類沒有定義任何構造函數,C#編譯器會為其自動生成一個默認的無參的構造函數。[1]
6.構造函數有回滾的效果,構造函數拋出異常時,構造的是一個不完整對象,會回滾,將此不完整對象的成員釋放(c++)
『肆』 java 構造方法調用。怎麼做
class
A
{
public
A(){}
public
A(String
a){}
public
A(String
a,String
b){
this();
}
public
A(String
a,String
b,String
c){
this(a,b);
......
}
不知道是不是想問的是這個。
構造方法
調用構造方法的話,可以採用「this」關鍵字來實現。
}
『伍』 如何調用父類的構造方法
調用父類的構造方法:
當你new一個子類對象的時候,必須首先要new一個父類的對象出來,這個父類對象位於子類對象的內部,所以說,子類對象比父類對象大,子類對象裡麵包含了一個父類的對象,這是內存中真實的情況.構造方法是new一個對象的時候,必須要調的方法,這是規定,要new父類對象出來,那麼肯定要調用其構造方法,所以:
第一個規則
子類的構造過程中,必須調用其父類的構造方法。一個類,如果我們不寫構造方法,那麼編譯器會幫我們加上一個默認的構造方法,所謂默認的構造方法,就是沒有參數的構造方法,但是如果你自己寫了構造方法,那麼編譯器就不會給你添加了,所以有時候當你new一個子類對象的時候,肯定調用了子類的構造方法,但是在子類構造方法中我們並沒有顯示的調用基類的構造方法,就是沒寫,如:super(); 並沒有這樣寫,但是這樣就會調用父類沒有參數的構造方法,如果父類中沒有沒有參數的構造方法就會出錯。
第二個規則
如果子類的構造方法中沒有顯示的調用基類構造方法,則系統默認調用基類無參數的構造方法注意:如果子類的構造方法中既沒有顯示的調用基類構造方法,而基類中又沒有默認無參的構造方法,則編譯出錯,所以,通常我們需要顯示的:super(參數列表),來調用父類有參數的構造函數。
了解更多java編程知識,推薦來北京尚學堂,雄厚的師資力量與科學的授課方式,會帶給你最完美的學習體驗。
『陸』 5.在一個構造方法內可以調用另一個構造方法嗎》如果可以,如何調用
可以,使用this調用。
例子如下:
『柒』 如何在方法里調用自己的構造方法,除實例化本身對象外
在普通的方法中是不能調用構造方法的,但是在構造方法中可以調用其他的構造方法。
public class Test {
public Test(){
this("test");
//調用 Test(String str){}
//this();調用構造方法,通過參數來區分調用的是哪個構造方法。
//需要注意的就是,不可能出現遞歸調用的現象。
}
public Test(String str){
System.out.println(str);
}
}
在普通的方法中也沒有調用構造方法的必要,如果是想調用構造方法中所寫的代碼,可以用如下方式。
public class Test {
public Test(){
this("test");
}
public Test(String str){
method1(str);
}
public void method1(String str){
System.out.println(str);
}
}
把構造方法中的代碼寫入一個方法中, 這樣如果在想調用構造方法中的代碼的話,直接調用method1就可以了。
『捌』 java中如何實現構造方法的調用
public class Util {
public String name;
public Util(){
System.out.println("無參構造方法..");
}
public Util(String name){
this.name = name;
System.out.println("有參構造方法.."+name);
}
public static void main(String[] args) {
Util u1 = new Util();
Util u2 = new Util("小明");
}
}
『玖』 Java類的構造方法,怎麼調用構造方法 我寫的有錯誤
構造方法調用重載的構造方法,不能直接調用,要用this關鍵字:
比如這一句,Employee(int
newAge,double
newSalary)//要求調用倆個參數的構造方法,傳入參數newAge和newSalary
修改為:this(newAge,newSalary)//要求調用倆個參數的構造方法,傳入參數newAge和newSalary
並且,實參不需要加類型修飾符。
其他的幾條,也作這樣的修改。
『拾』 構造函數的調用順序
構造代碼塊的作用同樣是給對象進行初始化。對象一建立就運行構造代碼塊了,而且優先於構造函數執行。這里要強調一下,有對象建立,才會運行構造代碼塊,類不能調用構造代碼塊的,而且構造代碼塊與構造函數的執行順序是前者先於後者執行。
構造代碼塊與構造函數的區別是:構造代碼塊是給所有對象進行統一初始化,而構造函數是給對應的對象初始化,因為構造函數是可以多個的,運行哪個構造函數就會建立什麼樣的對象,但無論建立哪個對象,都會先執行相同的構造代碼塊。也就是說,構造代碼塊中定義的是不同對象共性的初始化內容。
1)使用new操作符創建對象。如果含有靜態成員變數:
靜態成員變數的靜態代碼塊 -> 靜態成員變數的代碼塊 -> 靜態成員變數的構造方法) -> 靜態代碼塊 -> 代碼塊 -> 構造函數
2)如果不含靜態成員變數:
靜態代碼塊 -> (靜態成員變數的靜態代碼塊 -> 靜態成員變數的代碼塊 -> 靜態成員變數的構造方法) -> 代碼塊 -> 構造函數。靜態代碼塊只執行一次,而每次創建對象都會調用共同的構造代碼塊,而構造函數也只在創建對象時執行該對象的構造函數。