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先生,我没有得到这个问题的答案。如果你有答案,请在评论中链接它。