Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为父类的对象提供子类的构造函数有什么意义?_Java - Fatal编程技术网

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

Java 为父类的对象提供子类的构造函数有什么意义?,java,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(); // th

假设我有一段代码:

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

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

这实际上是一个著名的讨论主题

首先,有两件事被称为
对象
&
参考

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

参考是指你对物体的看法

在数据库方面,您可以将对象作为表进行比较,将引用作为视图进行比较

假设我们有一个三维圆柱体类型的物体,当你从上面看到它时,它看起来就像一个圆&从前面看,它看起来像正方形(这里我说的是相同的条件),但它实际上既不是圆也不是正方形

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

现在回到实际问题上来

当您编写
one o=newone()
时,它是one的实际对象,被引用(查看)为one

现在,当您编写
onepo=newtwo()
时,实际的two对象被引用为two。这里有在类2中定义的对象的所有组件。虽然由于引用的类型,您无法访问它们,但它们是存在的

要了解实际的差异,让我们讨论一下在编写类似这样的代码时会发生什么

two t=(两)o
two tt=(两)oo

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

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

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

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

好的,我会看到的,谢谢您,先生:-)一定要去看看多态性。而且这不是JAVA特有的。这对任何OOP都很有用。@AkshaySingh在发布新问题之前,请在网站上搜索所有未来的问题。很可能你的问题已经得到了回答。@CKing先生,我没有得到这个问题的答案。如果你有答案,请在评论中链接它。