在类中声明了一个Vector,怎样在构造函数中初始化

在类中声明了一个Vector,怎样在构造函数中初始化,第1张

构造函数申明为保护,说明该类不能被直接实例化,即不能直接new出来。 保护的构造函数除去自身外,只能被子类访问。所以这是一种潜在语义用法。 表示:定义为保护构造函数的类必须被继承使用。 所以这个题答案是:在派生类中初始化基类的方式初

瞧你这话说得!!

子类从基类继承来的变量在基类构造函数中可以初始化,在子类构造函数中也可以初始化!

在子类构造对象时,首先要调用基类的构造函数,再调用子类的构造函数;

子类对继承来的变量:

1初始化:那么可想而知,最终构造子类对象时子类对这个变量的初始化起了作用(因为先基类构造函数对其初始化,后子类构造函数对其初始化,明白吧);

2不初始化:那么可想而知,子类不干初始化这变量的事了,所以基类构造函数的初始化就发挥了作用。

总之,一句话,记住构造子类对象时,构造函数调用的顺序:始终是先调用基类构造函数,再调用子类构造函数,其他衍生出来的问题仔细想想就明白了!!

如果解决了你的疑惑,请采纳!否则请追问!加油哦!

如果不销毁自己,而是父类

那么你delete 自身的语句不是有问题么

既然你写的是delete 自身

当然先从自己开始

另外

父类与子类在存储上是包容的关系

子类内部包含父类

先析构自身的成员

然后到了父类那里

//当然,这里父类的空间是子类空间的一部分

//可以想象到覆盖,因为你delete子类,所以实行子类的

//析构,而父类在子类中,所以当析构完成到父类那里调用父类

//至于你会问为什么不县析构父类,然后在析构子类成员呢

//他们都是子类一部分啊

//因为析构是分步的,根据构造顺序,我们可以知道父类是在最里面的

//指针需要一点一点上移动

//当然需要最后了

子类构造函数调用父类的析构函数

JAVA初始化顺序

1、调用顺序:

JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。

先初始化父类的静态代码--->初始化子类的静态代码-->

(创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数

其他说明:

2 、类只有在使用New调用创建的时候才会被JAVA类装载器装入

3、创建类实例时,首先按照父子继承关系进行初始化

4、类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从本类继承的子类的初始化块执行,最后是子类的构造方法

5、类消除时候,首先消除子类部分,再消除父类部分

你这里C继承A,所以顺序是:

A的属性初始化-->A的构造-->C的属性初始化(此时new B()调用了B的构造)-->C的构造

这个就要说说java的类加载机制了。

先介绍就是java的类初始化。这4种情况会类初始化:

遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4条指令的最常见的Java代码场景是:使用new关键字实例化对象的时候,读取或设置一个类的静态字段(被final修饰、已在编译期把结果放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候。

使用javalangreflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化。

当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。

当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类。

再介绍下类加载顺序:

父类的静态代码块--->子类的静态代码块-->父类的非静态代码块-->父类构造函数-->子类非静态代码块--->初始化子类构造函数。

这个时候你就会发现为什么子类构造要super了。

super,超类,即父类。当你实例化一个子类的时候,编译器会自动查找子类的父类,并先将父类初始化。

当你的子类使用带参数的构造函数时,你必须保证该子类的父类也有相同的带参数的构造器。

1super(),它用来告诉编译器,爷我用的是哪个型号的构造器,方便你找俺老子。

2super属性,用于访问父类属性或方法。

比如,

public class Father(){

public Father(){}

public Father(String name,String sex){

thisname=name;

thissex=sex;

}

public String name="免贵姓唐";

public String sex;

}

public class Son_1(){

public Son_1()

public Son_1(String name,String sex){

super(name,sex);

}

public String name="真的免贵";

public static void main(String[] arg){

print(supername+" "+name);

}

}

快睡了,思维有点混。不懂hi我好了。568418555,Q我也成。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12176145.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存