2017-02-19 47 views
-1

比方说,我有一段代码:将子类的构造函数提供给父类的对象有什么意义?

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类的前两个对象创建的含义,并为第二个对象创建了相同的对象。

但是第三个对象呢?我们正在使用第一类的引用并提供子类的构造函数,我可以使用第三个对象(oo)来引用一个类的变量和方法而不是第二类。

如果我必须使用一个类的方法和变量,那么我可以将它与对象(o)而不是对象(oo)一起使用。那么当两个对象表现得像对方一样时,两个对象之间有什么区别呢?

one o = new one(); 
one oo = new sec(); 

我想知道这两个是什么改变来当我们使用子类的构造函数,而不是基类之间的差异。

+0

好的,我会看到谢谢先生:-) – babygame0ver

+0

肯定会看看多态性。这也不是JAVA特有的。对于任何OOP你都会很有用。 – Tom

+0

@AkshaySingh在发布新问题之前,请在网站上搜索所有未来的问题。有可能你的问题已经被回答了。 – CKing

回答

0

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

首先有两件事被称为object & reference

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

引用表示您的对象视图。

在数据库方面,您可以比较对象为表格&参考为视图。

假设我们有三维圆柱体类型的物体,当您从顶部看它时,它看起来像圆形&,它看起来像方形(这里我说的是相同的条件),但它实际上既不是圆形也不是方形。

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

现在回到实际问题。

当你写one o = new one()它是一个引用(视)为一个的实际对象。

现在,当你写one po = new two()它是两个实际的对象,被引用为两个。这里存在着在第二类中定义的对象的所有组件。尽管由于参考类型您无法访问它们,但它们是存在的。

要知道实际差异让我们讨论一下当你编写这样的代码时会发生什么。

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

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

在你的对象ootwo型的第二种情况下,这里的二类继承one类的属性,所以你可以把它当作one类的对象。但在第一种情况下,你不能因为同样的原因。

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

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