不是';Java中的t类相当于c中的结构

不是';Java中的t类相当于c中的结构,java,c,class,structure,Java,C,Class,Structure,我昨天刚开始学习java,因为我想制作android应用程序。到目前为止我只知道c。我正在读一本名为“headfirstjava”的书,它一直在谈论对象和类,这对我来说是非常新的。我只有一个问题,如果有人能为我澄清这一点,那将非常有帮助: 类(java)和结构(c)之间的区别是什么? ps:如果你能给我推荐一本真正适合初学者的书,我也很乐意,因为我现在正在读的这本书没有足够的细节来介绍那些完全不熟悉面向对象编程的人。谢谢。不。结构没有继承、方法、抽象方法、多态性和更多面向对象的概念 您可以尝试使

我昨天刚开始学习java,因为我想制作android应用程序。到目前为止我只知道c。我正在读一本名为“headfirstjava”的书,它一直在谈论对象和类,这对我来说是非常新的。我只有一个问题,如果有人能为我澄清这一点,那将非常有帮助: 类(java)和结构(c)之间的区别是什么?
ps:如果你能给我推荐一本真正适合初学者的书,我也很乐意,因为我现在正在读的这本书没有足够的细节来介绍那些完全不熟悉面向对象编程的人。谢谢。

不。结构没有继承、方法、抽象方法、多态性和更多面向对象的概念

您可以尝试使用结构使C符合面向对象的行为,但这与使用面向对象语言不同。

“Java中的类不等同于C中的结构吗?”

简短的回答是否定的


我的回答太短了,因为区别在于两个完全不同的范例之间的区别,它需要一本完整的书(甚至没有一章)如《用java思考》。

java类执行多个角色,其中只有一个是(隐式地)定义称为该类实例的数据结构的布局,但您认为对象本质上是数据结构是正确的,就像
struct
的实例一样

主要区别在于C的
struct
比Java类更原始、更“接近金属”。基本上,如果有更多的框架代码和严格遵守许多约定,您可以重新实现Java对象的大部分,但是语法不会像Java中那样干净


还有许多其他差异,例如编译器的静态检查、自动内存管理等所涵盖的内容。最后,差异大于相似之处,但从理解的角度来看,将Java对象与C结构进行比较并没有错。

我知道,我与这里很多人的观点相矛盾,但是你是对的,一个类实际上只是一个结构,有很多的细节

确切地说,C++语言实际上指定了一个类,它没有虚拟函数和/或虚拟继承的实例,其内存布局与C结构相同,具有相同的数据成员。 添加到

struct
以提供运行时多态性的只是一个v-table指针,用于查找虚拟成员。继承是通过将基类结构包含为子类
struct
的数据成员而生成的

当然,当您仔细考虑它时,您会意识到类必须以某种方式用
结构实现。毕竟,C++/Java类必须以某种方式实现。它有助于提醒自己,面向对象主要不是一种语言特性,它是一种可以在任何命令式编程语言中使用的范例。它可以用在java、C++、C、PASCAL、FORTRAN中,甚至在汇编程序中。所谓的面向对象语言添加的所有内容,都是处理面向对象的所有技术内容的语法糖


但是,当你开始使用C++或java时,学习所有的铃声和口哨是很重要的。< /P>可能的重复:例如,有相似之处,但有很大的不同。关于C结构的AubIONoBB,你是正确的,但是C++结构可以支持更多的特征。这就像在Java上为MI添加一个抽象。它不再是普通的Java,而是运行时添加的“在Java之上”。或者,从另一个角度来看:这就像编写Objective-C而不添加语法一样。我同意这个答案(在一般层面上)。虽然可以通过添加单独的运行时(和约定)来添加对此类概念的支持,但此功能不是C结构的一部分。因此,使用GOBEKET是一个反例,有效地论证了“结构是类”,因为可以使用C++来实现这些特性。C++中的结构和类是相同的,除了默认的访问修饰符。C、 另一方面,它不支持面向对象的东西。@yshavit确切地说。原来的C++编译器实际上是一个将C++转换成C的编译器,它使用Struts来伪造面向对象的东西。这并不能使C语言成为一种面向对象的语言,但如果你对它进行足够的弯曲和扭曲,你可以使它表现得像一种面向对象的语言。@vanza我想这可以归结为你所定义的“拥有”这些特性。我认为,考虑到问题的背景,这意味着语言给了你内在的东西。或者,你会认为汇编是一种功能性语言,仅仅因为没有什么功能性语言有你不能“拥有”(按你的定义)在汇编?@凡扎,我只是在回答的措辞中做了一个简单的编辑,以满足你对这些细节的注意。我希望Anubian Noob不介意。说得好,但我不同意。我们谈论的是C,而不是C++。在C语言中,结构只保存其他原语和结构。