‘壹’ 多态父类引用指向子类对象的时候,构造方法是怎么调用
先调用父类的构造方法,然后再调用子类的构造方法,最后将子类的对象赋值给父类。你可以使用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)如果不含静态成员变量:
静态代码块 -> (静态成员变量的静态代码块 -> 静态成员变量的代码块 -> 静态成员变量的构造方法) -> 代码块 -> 构造函数。静态代码块只执行一次,而每次创建对象都会调用共同的构造代码块,而构造函数也只在创建对象时执行该对象的构造函数。