A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

raikecody

中级黑马

  • 黑马币:206

  • 帖子:266

  • 精华:0

© raikecody 中级黑马   /  2014-5-29 00:15  /  975 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 raikecody 于 2014-5-29 09:21 编辑
  1. package com.itheima;

  2. abstract class Person
  3. {
  4.         private String name;
  5.         Person(String name){
  6.                 this.name = name;
  7.         }
  8.         public abstract void run();
  9. }

  10. class Men extends Person
  11. {
  12.         Men(String name){
  13.                 super(name);
  14.         }
  15.         public void run(){
  16.                 System.out.println("男人跑步");//问题出现在这个子类之中,假如我同时想要打印Men子类的name,这里因为权限原因不能直接插入name
  17.                                                                         //那是否意味着如果想调用name就必须要去父类中创建一个getName和setName方法?这样做是否妥当?
  18.         }
  19. }
复制代码
问题就是如果我想在子类的run方法中打印子类的name,是不是必须要去父类中创建getName和setName方法才可以?

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 很给力!

查看全部评分

7 个回复

倒序浏览
  1.     package com.itheima;
  2.     abstract class Person
  3.     {
  4.             private String name;
  5.             public void setName(String name){
  6.                     this.name = name;
  7.             }
  8.            
  9.             public void getName(){
  10.                     return name;
  11.             }
  12.             Person(String name){
  13.                     this.name = name;
  14.             }
  15.             public abstract void run();
  16.     }
  17.     class Men extends Person
  18.     {
  19.             Men(String name){
  20.                     super(name);
  21.             }
  22.             public void run(){
  23.                     System.out.println(super.getName()+"男人跑步");
  24.             }
  25.     }

复制代码

你既然将Person的name私有化了,那你不提供公开的方法去设置和访问还有意义么?其实面向对象的封装就是一种思想就是把基本的属性私有化,而对外提供一定的方法去访问,这样私有的属性才具有一定的意义,所以,这里就必须写set\get方法,以后的学习和设计也是这样的,属性基本全部私有化,然后全部提供访问方法。
建议你还是多多了解一下面向对象思想吧。

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
张百振 发表于 2014-5-29 00:24
你既然将Person的name私有化了,那你不提供公开的方法去设置和访问还有意义么?其实面向对象的封装就是一 ...

多谢回答,您说的我都理解,我知道私有化属性要对外提供set/get方法。

但我刚才有点绕不过来的是在继承中,子类无法继承父类中的私有化成员,但子类又需要调用父类中的私有化成员,那么看来唯一的办法就是在父类中创建getter和setter了。

但是这样的继承写法在实际开发中是否妥当呢?毕老师在第七天第10个视频中创建了多个私有化的对象,却没有对外提供set和get方法,我想可能是当时讲的不是很深入就没去涉及这一块。
回复 使用道具 举报
因为父类的成员变量被私有,不提供方法,就不能访问,那这个变量一木有意义,木有必要定义了,所以就要提供set/get方法了

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 很给力!

查看全部评分

回复 使用道具 举报
葛晓东 发表于 2014-5-29 00:44
因为父类的成员变量被私有,不提供方法,就不能访问,那这个变量一木有意义,木有必要定义了,所以就要提供 ...

恩对,绕过弯儿来了,看来毕老师在第七天的视频中还没有涉及到更加严谨的知识点。
回复 使用道具 举报
raikecody 发表于 2014-5-29 00:48
恩对,绕过弯儿来了,看来毕老师在第七天的视频中还没有涉及到更加严谨的知识点。 ...

嘿嘿  ,我刚好这几天学到这里  老师讲的很细致  
回复 使用道具 举报
lin' 初级黑马 2014-5-29 08:40:56
7#
你改super(name)=name;你只是访问了父类的name,并没有赋值
回复 使用道具 举报
既然要访问的类中的字段被private修饰,那要想外界访问到它,必须提供get方法即可,set方法可以不要。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马