我们说我有一段代码:
class one
{
String one = "First";
}
class sec extends one
{
String sec = "Second";
}
class num
{
public static void main(String[] args)
{
one o = new one();
sec s = new sec();
one oo = new sec();
// the object will be of that class for which we are providing the reference
// then what is the use of the constructor
sec s = new one(); // this is not working
System.out.println(o.one);
System.out.println(s.sec);
System.out.println(oo.one); # this seems right
System.out.println(oo.sec); # this is not working
}
}
创建对象时,我对引用和构造函数感到困惑。
我已将sec
类扩展为继承自类one
。
我得到了前两个对象创建的含义,我们引用one
类并为第二个对象创建相同的对象。
但第三个对象怎么样?我们使用类1的引用并提供子类的构造函数,我可以使用第三个对象(oo)来引用一个类的变量和方法而不是第二个类。
如果我必须使用一个类的方法和变量,那么我可以将它与对象(o)而不是对象(oo)一起使用。那么两个物体彼此表现时有什么区别呢?
one o = new one();
one oo = new sec();
我想知道这两者之间的区别,当我们使用子类的构造函数而不是基类时会发生什么变化。
答案 0 :(得分:0)
这实际上是一个着名的讨论话题。
首先,有两件事叫做object
& reference
。
对象表示您的实际图像或实际数据。
参考意味着您对象的视图。
就数据库而言,您可以将对象比较为表和&参考视图。
假设我们从顶部看到它有三维圆柱型物体,它看起来像圆形和放大器。从前面看起来像方形(这里我说的是相同的条件),但它实际上既不是圆也不是方形。
这里的实际物体是你的气缸&从不同角度看到的图像是你的参考。
现在回到实际问题。
当您编写one o = new one()
时,它的实际对象被引用(查看)为一个。
现在当你写one po = new two()
时,它的实际对象为2,引用为2。这里存在对象的所有组件,它们在第二类中定义。虽然由于引用的类型而无法访问它们但它们存在。
要知道实际差异,请讨论编写类似代码时会发生什么。
two t=(two)o
或two tt=(two)oo
在第一种情况下,Java抛出异常ClassCastException
。在第二种情况下,您是被允许的。
在第二种情况下,您的对象oo
的类型为two
,此处类2继承了类one
的属性,因此您可以将其视为类{{1}的对象}}。但在第一种情况下你不能因为同样的原因。
这样做的主要原因是我们在处理对象时并不关心对象的所有属性。
例如,当您应该设计代码以将邮件发送到某些人的列表时。现在想想你真正需要完成这项任务的是什么?只有电子邮件ID .. 你实际上并不关心其他细节,这些细节显然存在于人的对象中。现在,您使用getEmail方法定义一个名为Email的类。(实际上它应该是接口)&你制定约束,每个人都应该扩展这个类现在人的每个对象都包含属性电子邮件,虽然它可以包含其他属性但你不必关心它。