黑马程序员技术交流社区
标题: OC中的点方法和java中的点方法有什么区别? [打印本页]
作者: 啊康 时间: 2014-4-9 20:39
标题: OC中的点方法和java中的点方法有什么区别?
各位大神!在OC中对象调用成员变量有好几种方式,其中一种就是点方法,而java中好像更多的是用点方法,那么两种语言中的点方法有什么不同吗?能否请大神详解?给我对比!谢谢!!
作者: 周宇华 时间: 2014-4-9 21:42
oc中的点语法只能调用set方法和get方法,而java可以调用成员方法。
作者: 程浩 时间: 2014-4-9 23:15
点语法:
Person *p =[Person new];
p.age=10;//点语法的本质还是方法调用,不是访问成员变量,自动转换成[p setAge:10];
int a=p.age;//此时自动转化成[p age];
//若直接访问成员变量,OC只有通过->来访问
但是注意:
使用点方法前必须得有setget方法
作者: Freedam 时间: 2014-4-12 01:53
- int main()
- {
- @autoreleasepool {
- Student *stu = [[Student alloc] init];
- // 设置age的值
- stu.age = 10; // 等价于[stu setAge:10];
- // 取出age的值
- int age = stu.age; // 等价于int age = [stu age];
- NSLog(@"age is %i", age);
-
- [stu release];
- }
- return 0;
- }
复制代码 java中的点语法一般用做访问类中的公有成员变量或成员方法。例如:
- class Person
- {
- int age = 0;
- void setAge(int age)
- {
- this.age = age;
- }
- int getAge()
- {
- return age;
- }
-
- }
- class demo
- {
- public static void main(String[] args)
- {
- int a = 0;
- Person s = new Person();
- a = s.getAge(); //点语法直接调用类中的方法
- System.out.println(a);
- s.setAge(10);
- a = s.getAge(); //点语法直接调用类中的方法
- System.out.println(a);
- System.out.println(s.age);//点语法直接访问公有变量的值
- }
- }
复制代码
OC中的点语法与java的虽然在形式上相同,但是在用法上有着显著地不同。例如:
a.h
- #import <Foundation/Foundation.h>
- @interface Student : NSObject
- {
- int age;
- }
- - (void)setAge:(int)newAge;
- - (int)age;
- @end
复制代码
a.m
- #import "a.h"
-
- @implementation Student
-
- - (void)setAge:(int)newAge
- {
- age = newAge;
- }
- - (int)age
- {
- return age;
- }
- @end
复制代码
main.m
- #import <Foundation/Foundation.h>
- #import "a.h"
- int main()
- {
- @autoreleasepool {
- Student *stu = [[Student alloc] init];
- [stu setAge:10]; //设置age的值
- int age = [stu age];//取出age的值
- NSLog(@"age is %i", age);
- [stu release];
- }
- return 0;
- }
复制代码
这是OC中正常的调用方法用点语法替换之后主函数为:
- int main()
- {
- @autoreleasepool {
- Student *stu = [[Student alloc] init];
- // 设置age的值
- stu.age = 10; // 等价于[stu setAge:10];
- // 取出age的值
- int age = stu.age; // 等价于int age = [stu age];
- NSLog(@"age is %i", age);
- [stu release];
- }
- return 0;
- }
复制代码
把原来的[stu setAge:10]替换成了stu.age = 10,把原来的int age = [stu age]替换成了int age = stu.age。因此,OC中点语法的含义跟Java是完全不一样的,OC点语法的本质是方法调用,不是直接访问成员变量。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |