将子类的构造函数提供给父类的对象有什么意义?

时间:2017-02-19 12:34:25

标签: java

我们说我有一段代码:

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(); 

我想知道这两者之间的区别,当我们使用子类的构造函数而不是基类时会发生什么变化。

1 个答案:

答案 0 :(得分:0)

这实际上是一个着名的讨论话题。

首先,有两件事叫做object& reference

对象表示您的实际图像或实际数据。

参考意味着您对象的视图。

就数据库而言,您可以将对象比较为表和&参考视图。

假设我们从顶部看到它有三维圆柱型物体,它看起来像圆形和放大器。从前面看起来像方形(这里我说的是相同的条件),但它实际上既不是圆也不是方形。

这里的实际物体是你的气缸&从不同角度看到的图像是你的参考。

现在回到实际问题。

当您编写one o = new one()时,它的实际对象被引用(查看)为一个。

现在当你写one po = new two()时,它的实际对象为2,引用为2。这里存在对象的所有组件,它们在第二类中定义。虽然由于引用的类型而无法访问它们但它们存在。

要知道实际差异,请讨论编写类似代码时会发生什么。

two t=(two)otwo tt=(two)oo

在第一种情况下,Java抛出异常ClassCastException。在第二种情况下,您是被允许的。

在第二种情况下,您的对象oo的类型为two,此处类2继承了类one的属性,因此您可以将其视为类{{1}的对象}}。但在第一种情况下你不能因为同样的原因。

这样做的主要原因是我们在处理对象时并不关心对象的所有属性。

例如,当您应该设计代码以将邮件发送到某些人的列表时。现在想想你真正需要完成这项任务的是什么?只有电子邮件ID .. 你实际上并不关心其他细节,这些细节显然存在于人的对象中。现在,您使用getEmail方法定义一个名为Email的类。(实际上它应该是接口)&你制定约束,每个人都应该扩展这个类现在人的每个对象都包含属性电子邮件,虽然它可以包含其他属性但你不必关心它。