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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高薇 中级黑马   /  2012-8-19 10:06  /  2229 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

abstract class Student
{
abstract void study();
public void sleep()
{
  System.out.println("躺着睡");
}
}
class BaseStudent extends Student
{
public void study()
{
  System.out.println("base study");
}
public void sleep()
{
  System.out.println("坐着睡");
}
}
class AdvStudent extends Student
{
public void study()
{
  System.out.println("Adv study");
}
}
class DoSome
{
public static void dosomething(Student s)
{
  s.study();
  s.sleep();
}
}
class X4
{
public static void main(String[] args)
{
  DoSome ds=new DoSome();
  ds.dosomething(new BaseStudent());
  ds.dosomething(new AdvStudent());
}

}
这里为什么要将dosomething方法封装成一个类呢?有点转不过来了。。。。

12 个回复

倒序浏览
如果你以后要修改这个代码,你要再添加一个别的班级的学生的话,要想调用 你不得在定义一个对象嘛!这样不就提高了代码的扩展性嘛!

评分

参与人数 1黑马币 +10 收起 理由
高薇 + 10 淡定

查看全部评分

回复 使用道具 举报
package day17;
abstract class Student1 {
abstract void study();
public void sleep() {
  System.out.println("躺着睡");
}
}
class BaseStudent extends Student1 {
public void study() {
  System.out.println("base study");
}
public void sleep() {
  System.out.println("坐着睡");
}
}
class AdvStudent extends Student1 {
public void study() {
  System.out.println("Adv study");
}
}
/**
* 这里为什么要将dosomething方法封装成一个类呢?有点转不过来了。。。。
* 这个DoSome类,是用作事务处理的,其实前面的几个类,相当于javaBean,这个类相当于专门对这些javaBean进行业务操作的
*
*/
class DoSome {
public static void dosomething(Student1 s) {
  s.study();
  s.sleep();
}
}
class X4 {
public static void main(String[] args) {
  DoSome ds = new DoSome();
  ds.dosomething(new BaseStudent());
  ds.dosomething(new AdvStudent());
}
}
//你要是把DoSome类去掉,x4改写成这样肯定也错不了
class X4 {
public static void dosomething(Student1 s) {
  s.study();
  s.sleep();
}
public static void main(String[] args) {
  dosomething(new BaseStudent());
  dosomething(new AdvStudent());
}
}
回复 使用道具 举报
为了方便使很多对象做同一部分的事情,比如说BaseStudent和AdvStudent里不只有study()和sleep()方法还有A(),B(),C()方法,现在我只想让这些对象都执行study(),B(),C()方法,可以新建对象然后逐一的调用这些方法,dosomething(Student s)就省去了每个对象调用方法的麻烦,定义好里面要调用的方法直接将对象传进去就好了。
回复 使用道具 举报
张忠豹 发表于 2012-8-19 10:20
package day17;
abstract class Student1 {
abstract void study();

我知道错不了啊,就是问为什么要加上呢?本来好好的,现在把这个方法封装成一个类,有什么好处呢?
下面还是实例化了,好像没有省事呀
回复 使用道具 举报
黑马张旭明 发表于 2012-8-19 10:21
为了方便使很多对象做同一部分的事情,比如说BaseStudent和AdvStudent里不只有study()和sleep()方法还有A() ...

函数的作用是这个,可是干嘛还要在函数上再加个类呢?
回复 使用道具 举报
本帖最后由 霍明波 于 2012-8-19 10:33 编辑

DoSome是一个方法类,它把各个等级的学生的共性特点(所有学生都的学习吃饭)study,sleep抽取出来创建一个方法类,在主函数只要创建这个方法类的对象,在传入先关的学生参数就能实现该类学生的功能,在以后升级时再来一种学生也可以用这个方法,提高程序的拓展性,降低的学生跟主函数的耦合性,避免程序死板,不能升级
回复 使用道具 举报
高薇 发表于 2012-8-19 10:22
我知道错不了啊,就是问为什么要加上呢?本来好好的,现在把这个方法封装成一个类,有什么好处呢?
下面 ...

不知道你接触过mvc没。mvc讲究的就是业务逻辑与其他各层区别开来。
打个比方。如果在你的业务中,前面几个类都没有改变,而仅仅是对其相关对象的操作发生了改变。那么只需修改一下DoSome类,而不用修改其他的类……
可能你现在还认为这种操作没有必要,等以后做一个项目的时候,你会发现几乎每个class都写在一个单独的.java文件中,这样方便修改
回复 使用道具 举报
这个函数具有一定的功能所以将他封装成一个类似“工具”的类里面,为什么不放在主函数里和毕老师之前说的工具类是一个道理,在这个代码里的确写个函数就好了,我想这跟毕老师的开发习惯有关吧
回复 使用道具 举报
现在知识面很浅,所以不明白其中的缘由,
既然现在没什么大碍的话,
这个就留在以后的程序中慢慢体会吧。
谢谢各位的详细解答,我的问题已经解决。


已解决
回复 使用道具 举报
孙树勋 发表于 2012-8-19 10:17
如果你以后要修改这个代码,你要再添加一个别的班级的学生的话,要想调用 你不得在定义一个对象嘛!这样不 ...

                           明白了
回复 使用道具 举报
一方面:因为无论初级的和高级的都学习和睡觉,只是学习和睡觉方法不一样,而都有这个动作,故把这个动作封装成类,
另一方面:以后再添加对象只需要调用这个动作就行了!大大减少了代码的书写
回复 使用道具 举报
这就好比中午组长喊大家吃饭,他可以有两种喊法:
第一种喊法:小李,去吃饭。小王,去吃饭,小赵,去吃饭,小高,去吃饭。小胡,你也去吃饭。小刚,小丁,快点啦。
第二种喊法:是人的话,都去吃饭。
个人感觉,就为了达到这么个效果。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马