java会删除多态性中的额外变量吗?
public abstract class car{
protected String carA,carB,carC;
}
public class car_A{
car_A(){
carA = "carA";
}
}
public class car_B{
car_B(){
carB = "carB";
}
}
public class car_C{
car_C(){
carC = "carC";
}
}
public class test{
public static void main(String args[]){
Car[] a = new Car[3];
Car[0] = new carA();//Will carB & carC be delete?
Car[1] = new carB();//Will carA & carC be delete?
Car[2] = new carC();//Will carA & carB be delete?
}
}
垃圾回收会删除对象中的另一个字符串吗
额外的问题:在允许我使用多态性的子类中是否可能有唯一的变量声明
# 1 楼答案
我想你是说。。。有什么东西可以消除这些变量吗
答案是否定的。所有三个变量都存在于所有三个子类中
询问是否有东西会删除字符串是没有意义的。您所指的字符串对象不存在:它们永远不会被创建。示例子类中未初始化的字段将包含
null
而不是String
对象。此外,只有当GC(如果启用了“转义分析”,则编译器)推断出对象变得不可访问时,对象才会被删除如果您公开了这些变量,则不会
如果将它们设置为私有,并使用getter和setter提供访问权限,那么有一种黑客方法可以做到这一点:
但是,不建议这样做,因为这些黑客行为违反了可替代性原则
# 2 楼答案
当存在继承时,我们讨论多态性,因此您应该像
public class CarA extends Car{
那样更改代码以进行继承当
Car
类和CarA
类之间存在继承时,子类CarA
将继承超类Car
(String carA,carB,carC
)的所有属性,当你在CarA
构造函数中初始化这样的carA = "carA";
时,结果是(carA
将有"carA"
,carB
将有null
,carC
将有null
)那么,您问题的另一个答案是java会删除多态性中的额外变量吗不是