黑马程序员技术交流社区

标题: static与父类的选择 [打印本页]

作者: 夏日蓝雪    时间: 2014-6-6 13:58
标题: static与父类的选择
本帖最后由 夏日蓝雪 于 2014-6-8 21:37 编辑

static抽取出来的是共性的东西,父类也是抽象出来的共性的东西,那这两者之间有什么区别吗?
什么时候优先考虑static,什么时候优先考虑继承呢?
作者: 雾里看花。    时间: 2014-6-6 18:57
它表示静态的、全局的。
在类中修饰属性、方法,表示这些是类的成员,非实例的成员,可以直接用“类名.属性/方法”,而非必须先创建对象才能调用,这就是说,类的成员只能调用类的成员,而实例的成员,先创建对象才能调用。
我的理解,在内存中,先申请到一块空间A,存储了类的结构和static修饰的内容,创建对象,就是再申请一块空间B,复制A到B,再初始化后来的内容,这样就明白了,为什么类名可以用。
作者: 博€$€海    时间: 2014-6-6 19:27
在类中修饰属性、方法,表示这些是类的成员,非实例的成员,可以直接用“类名.属性/方法”,而非必须先创建对象才能调用,这就是说,类的成员只能调用类的成员,而实例的成员,先创建对象才能调用。
作者: 江祖贇    时间: 2014-6-6 19:42
static抽取出来的是共性的东西 是某些需要公用成员 ,父类抽象出来的共性的东西 是很多的成员的集合吧
作者: cain    时间: 2014-6-6 20:09
一些 共有的方法 可以 放到父类里,这就是 面向对象里 封装 继承
作者: 夏日蓝雪    时间: 2014-6-6 20:15
江祖贇 发表于 2014-6-6 19:42
static抽取出来的是共性的东西 是某些需要公用成员 ,父类抽象出来的共性的东西 是很多的成员的集合吧 ...

你的回答让我想到:若是成员变量的话,被static修饰则所有对象共享一块空间,任何一个对象对变量的修改都会反映到所有对象上,即类中静态成员最后一次执行得到的值是所有对象中这个成员变量的值;而继承中,是所有对象把父类的东西拿过来,就好像一人复制一份,本对象对成员变量的改变只反映到本对象中。若是函数的话,用static修饰和存在于类中好像没什么区别吧?不知道我理解的对不对。
作者: 江祖贇    时间: 2014-6-6 20:34
夏日蓝雪 发表于 2014-6-6 20:15
你的回答让我想到:若是成员变量的话,被static修饰则所有对象共享一块空间,任何一个对象对变量的修改都 ...

static 修饰的函数 可以用类名 直接使用。。
作者: 夏日蓝雪    时间: 2014-6-6 20:45
江祖贇 发表于 2014-6-6 20:34
static 修饰的函数 可以用类名 直接使用。。

哦,对,把这点给忘了。那什么时候优先考虑static,什么时候优先考虑继承呢?
作者: 江祖贇    时间: 2014-6-6 20:56
夏日蓝雪 发表于 2014-6-6 20:45
哦,对,把这点给忘了。那什么时候优先考虑static,什么时候优先考虑继承呢? ...

这个问题 具体问题具体讨论吧      如果你知道了   记得告诉我i哈
作者: 李小然    时间: 2014-6-7 22:19
本帖最后由 李小然 于 2014-6-8 11:40 编辑

static是针对于同一类的对象
同一类的对象中有相同的部分,共享一份即可
向上抽取后
不需要每次new对象的时候重新建一份
例如:新建一个Student类
将studentNum设置为static,可以在每new一个对象就+1
达到计算student人数的效果。
最终都是Student类new出来相同的对象。

继承是相对于不同类的对象
不同类的对象中有相同的一部分
向上抽取后
不同的类new出来的对象可以共享父类中的成员
例如:有猫和狗两个类
他们两都要睡觉,那么睡觉方法就可以向上抽取
猫类和狗类都继承含有睡觉这个方法的类。
最终猫类new猫对象,狗类new狗对象



作者: java木    时间: 2014-6-7 23:07
我看Thinking in java 上说的,其实static 并不是严格的OOP思想,可以将每个需要他的对象都可能会使用的变量修饰伪静态。不依赖特别数据,每个需要他的可能都会用
到他它的函数,设为静态。java中static最好准确运用。滥用会造成内存浪费。
作者: 杨胜男    时间: 2014-6-8 09:34
static修饰的是公用成员 ,父类里面的事共性成员,还是有区别的
作者: 夏日蓝雪    时间: 2014-6-8 11:10
李小然 发表于 2014-6-7 22:19
static是针对于同一类的对象
同一类的对象中有相同的部分,共享一份即可
向上抽取后

哦哦,原来是这么回事。谢谢版主!
作者: 夏日蓝雪    时间: 2014-6-8 11:18
江祖贇 发表于 2014-6-6 20:56
这个问题 具体问题具体讨论吧      如果你知道了   记得告诉我i哈

在版主的提点下,终于明白了:
当同一类对象需要抽取相同的部分共享时,用static;
而不同的对象抽取相同的部分作为复制模板时,用继承。
作者: 江祖贇    时间: 2014-6-8 12:36
夏日蓝雪 发表于 2014-6-8 11:18
在版主的提点下,终于明白了:
当同一类对象需要抽取相同的部分共享时,用static;
而不同的对象抽取相同 ...

收到  谢谢 !!!
作者: 执笔梦    时间: 2014-6-8 13:21
针对的类型不一样
作者: 倪大大    时间: 2014-6-8 13:27
虽然感觉很相似,但是这是完全两个领域
static 只是同一个类的对象所共享,作用范围在同一个类的不同对象之间
而继承 是类上的关系, 是不同类之间的共性 然后抽取成一个父类.
你想一下,这完全是两个层次的东西
作者: wangkerui    时间: 2014-6-8 13:41
完全没有比较性啊,父类的抽取是为了扩展,static 的抽取是为了方便调用。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2