从C转到JAVA学习路之struct与class对比
来源:互联网 发布:网络宣传工作培训通知 编辑:程序博客网 时间:2024/04/29 06:39
JAVA里最牛B的最基本的就是类,而C语言中的struct也可以定义自己的数据结构, 它们有很多相似的也有区别。在我看来它们之间最大的不同是struct里不支持方法,class里支持。
方法是什么?就是函数,也就是说JAVA中的成员变量与函数归属于一个类的,C语言中有办法做到吗? 我想到的就是函数指针。
先看如下C代码:
#include<stdio.h>float Getlen(float r)//求周长{ return 3.14*r*r;}float Getrare(float r)//求面积{ return 2*3.14*r;}typedef struct s_circle{ float r; float (*getlen)(float); float (*getrare)(float);}Circle;void main(){ Circle cl; cl.getlen = Getlen;//关键点就在这里,将函数与类型关联起来 cl.getrare = Getrare; printf("%f %f",cl.getlen(1), cl.getrare(2));}
我定义了一个Circle类型,里面有3个成员,一个普通变量,2个函数指针。在main()里面我将cl的函数指针与上面两个函数关联起来了,在使用的时候就直接调用,发现没有跟JAVA中的类非常相似了,都可以直接用方法了。
下面看下JAVA中实现这个功能:
class Circle{ double r; double getlen(double r)//求周长{ return 3.14*r*r;} double getrare(double r)//求面积{ return 2*3.14*r;}}public class example { public static void main(String[] args) { Circle cl = new Circle(); System.out.println(cl.getlen(1)+" "+cl.getrare(2)); }}
大家对比一下,都要定义成员,都要定义2个函数,使用时也是直接调用方法,是不是并没有什么区别嘛。
如果只写一个类真的没什么区别,但是JAVA是以类为基本构造起来的,所以它将类功能发挥到了极致,加了很多功能。
下面来看下类的继承与C中struct的关系:
看下C的两个结构体:学生与工人
typedef struct s_student{ int age; char name[10]; char sex[4]; char number[20];//学号 int grade;//年级}Student;typedef struct s_work{ int age; char name[10]; char sex[4]; char company[20];//公司 char type[10]; //工种}Work;
大家可以发现age, name, sex重复了,如果再定义老师,农民等类型。发现还是要重复写这3个成员,因为是人都会有这3个成员。所以可以提取出来一个类型,如下
typedef struct s_human{ int age; char name[10]; char sex[4];}Human;typedef struct s_student{ Human info; char number[20];//学号 int grade;//年级}Student;typedef struct s_work{ Human info; char company[20];//公司 char type[10]; //工种}Work;
这样以后不管定义多少种身份,都可以用Human这个基本信息了。
细心的同学应该会发现,这尼妹跟JAVA里类的继承很像嘛。不过JAVA做的更完美, struct类型下的成员信息是全部公开可访问的,但现实生活中不是这样的,比如女生的年龄,你的存款等。java类成员可以用public, private, protect修饰。
public就是公开都可以访问, private就是私有。如果你的存款想让家人或者儿子们知道,那就用protect修饰。这太生活化了,真的很好用很符合现实生活中的对象存在方式。
总结: 面向对象和面向结构是给开发人员看的,对计算机来的就是执行语句,操作内存,根本不存在什么区别。
这是对比C学JAVA的最后一篇文章了,后面将要用JAVA的思想去考虑问题,不过经过这次对比我发现学起JAVA来很爽,效率高了很多。
为什么呢打个恶俗的比方就知道了:
直接学JAVA:就像你面前站着一个穿了几十件衣服的苍老师,任你发挥,你需要先一件件的脱掉衣服,可能还没到脱完就兴趣没了。
对比学JAVA:这个就像你面前站个没穿衣服的苍老师,你发挥完之后再慢慢的一件一件把衣服穿上,这时心态好多了(我现在就是这样感觉)
0 0
- 从C转到JAVA学习路之struct与class对比
- 从C转到JAVA学习路之基本知识对比
- C#/WPF学习笔记:class 与 struct
- JNI Java class与C struct对应
- 【C#学习】class 和 struct 对比
- (基础) class 与 c 语言对比学习-OC+class
- C/C++struct与C++struct/class关键字详解
- C/C++struct与C++中的struct/class
- [C#]class 与 struct 的区别
- C++:struct与class的区别
- 快速入门C#编程之struct和class对比
- Objective-c 与java 的对比学习
- c++的class与struct VS c的struct
- JAVA对比C语言,从入门到精通学习JAVA
- C# learning之Class与Struct
- 刚从C转到JAVA的我的困惑(急)
- 从C转到Java下打通了任督二脉
- c与c++中struct与class区别与联系
- jenkins基础使用
- shiro整合spring+springmvc
- C#程序逻辑结构
- 怎么实现表单提交后不重新刷新当前页面
- 安装ipython notebook及基本命令(快捷键)
- 从C转到JAVA学习路之struct与class对比
- 一些优秀的Linux学习博客推荐,很实用
- 判断图片是否全部加载
- mysql删除冗余数据
- Postgresql 9.4 判断表是否存在...
- zeromq 的 ZMQ_DEALER 模式
- CSS中常用解决问题的技巧
- future模式
- MDWiki —— 一个可以自动生成左侧菜单并在线访问的工具