Chinaunix

标题: 求救:关于抽象类 abstract class [打印本页]

作者: 布布    时间: 2006-04-11 19:30
标题: 求救:关于抽象类 abstract class
大家有谁了解这一块的的知识么 给我讲讲或简单说一下
我正在做有关抽象类的测试 现在还有些迷茫
先谢谢大家了 万分感谢了

[ 本帖最后由 布布 于 2006-4-11 19:32 编辑 ]
作者: 艾斯尼勒    时间: 2006-04-11 21:38
测试偶不懂,抽象类稍微知道一些

如果一个类被用abstract修饰那么这个类就是抽象类

以上纯属放屁,毫无用处

一般来说抽象类中会有抽象方法,那么什么是抽象方法呢?

一个方法被abstract修饰并且没有方法体(不是说空方法,而是就没有那对大括号),取而代之的是一个分号,那么这个方法就是抽象方法。

那么定义这么一个抽象方法又有什么用处呢????

是为了被子类所覆盖用的!一个类如果有抽象方法就必须被abstract标记为抽象类,一个抽象类是无法用new创建实例对象的。那么使用这个类的方法就是继承它,并且重写抽象类的抽象方法,也就是实现这个抽象方法。这是必须的,否则这个子类也必须被定义为抽象方法。
这时我们可以去使用父类的引用来赋一个子类的实例,利用多态的特性来作些操作。

至于多态是什么。。。。您要另开帖子问我们再讨论,这里不多说了
作者: 葱花    时间: 2006-04-11 21:47
还是不懂!好深奥!
作者: 艾斯尼勒    时间: 2006-04-11 22:03
原帖由 葱花 于 2006-4-11 21:47 发表
还是不懂!好深奥!


失败。。。

现在我不知道该从何说起了。。。

说说从哪儿开始看不懂了的?
作者: test333    时间: 2006-04-11 22:30
我晕了。今年流行代码测试么?谁有兴趣帮俺测试(无偿的哦)N堆代码都没正式测试过..

抽象类...也测试..那写个实现类试试吧...
作者: perryhg    时间: 2006-04-12 04:05
二楼的解释让人觉得如堕云里雾里,你要是不清楚可以保持沉默的啊,瞎搅和无助于互助学习啊,你要是真想帮人家可以自己学会来再来教啊。关于抽象类的问题,我找了篇文章给大家看看,有什么想法可以在这里讨论。

http://software.ccidnet.com/art/322/20030312/40306_1.html
作者: 布布    时间: 2006-04-12 08:47
先谢谢大家了
我对这块儿确实不懂 所以还是希望各位能讲的明白些~~~~~
给大家一个例子 麻烦大家帮我看一下 这个该怎么测试
    public final DataInfo getRecord(final int recNum)
        throws FlightException, RemoteException {
             try {
                      return data.getRecord(recNum);
              } catch (DatabaseException e) {
                        throw new FlightException(e, e.getMessage());
                }
    }

我写的老是报错 改了好久都不行 郁闷ing~~~~~~~~~~~~~
唉 可怕啊~~~~
麻烦大家了 谢谢
作者: carset    时间: 2006-04-12 08:52
似乎代码很眼熟啊.你们都是一个公司实习的吧.拿着工作来这里问..汗...
作者: 布布    时间: 2006-04-12 08:54
原帖由 carset 于 2006-4-12 08:52 发表
似乎代码很眼熟啊.你们都是一个公司实习的吧.拿着工作来这里问..汗...



好心人帮帮忙~~~~~~

作者: 布布    时间: 2006-04-12 09:09
帮帮忙吧~~~~
我们都乱死了~~~~~~
做了好久还是一点头绪没有~~~~

作者: 布布    时间: 2006-04-12 10:24
没人帮忙么?????????????????????????????
     
作者: tong0245    时间: 2006-04-12 10:28
你们着什么急啊 慢慢工作慢慢体会。
我对接口 抽象类 的作用 和多态是怎么回事 也是工作一段时间才了解的。不过我声明啊 我从来没有上学学过。
我也没有上过大学。 我自己学习的java 那会我也不上网。 就是看书自己学习的。然后找的工作。再从工作中学习。不会的问同事。 所以啊 你们现在好幸福
作者: 布布    时间: 2006-04-12 10:35
原帖由 tong0245 于 2006-4-12 10:28 发表
你们着什么急啊 慢慢工作慢慢体会。
我对接口 抽象类 的作用 和多态是怎么回事 也是工作一段时间才了解的。不过我声明啊 我从来没有上学学过。
我也没有上过大学。 我自己学习的java 那会我也不上网。 就是看书 ...



我们上课的时候也没讲过这些啊 何况我的专业课也不是JAVA 那也是我们自己后来学的啊 我现在一直在看和测试有关的文档 可来回来去就那一个例子 理论和实践是两个不同的环节啊 郁闷~~~
能不着急吗?都好久没有工作今进展了 呜呜呜呜~~~~~~~~~~~~~
再这样下去 我们就该露宿接头了~~~~~~
作者: tong0245    时间: 2006-04-12 10:37
还好我们头头没有像你们公司头头那样脑壳进水。让没有经验的人做白盒测试 整个是他妈瞎胡闹
作者: 布布    时间: 2006-04-12 10:47
偶饿 偶要吃饭~~~~~
   
漂亮的饭碗里面装的不一定是天下美食啊~~~~~~
作者: 葱花    时间: 2006-04-12 10:49




作者: 布布    时间: 2006-04-12 11:29
原帖由 葱花 于 2006-4-12 10:49 发表






你干吗呢???丢人回家丢去 跟我回家!!!:wink:
作者: b46    时间: 2006-04-12 11:39
原帖由 布布 于 2006-4-12 10:47 发表
偶饿 偶要吃饭~~~~~
   
漂亮的饭碗里面装的不一定是天下美食啊~~~~~~

哇O
小猫这次有的忙了

作者: 葱花    时间: 2006-04-12 11:43
谁是小猫??????????
作者: tong0245    时间: 2006-04-12 11:44
斑竹
作者: b46    时间: 2006-04-12 11:44
原帖由 葱花 于 2006-4-12 11:43 发表
谁是小猫??????????

和小c类似

作者: 布布    时间: 2006-04-12 11:56
原帖由 b46 于 2006-4-12 11:39 发表

哇O
小猫这次有的忙了



我饿 和小猫有什么必然联系么??????
作者: 葱花    时间: 2006-04-12 12:10
原帖由 tong0245 于 2006-4-12 11:44 发表
斑竹

哦!
         我是小羊!
作者: 布布    时间: 2006-04-12 12:12
不要闹 不要闹!!!
我是宠物管理员~~~~~~
作者: 葱花    时间: 2006-04-12 12:14
哼!!!!
作者: 布布    时间: 2006-04-12 12:16
原帖由 葱花 于 2006-4-12 12:14 发表
哼!!!!



注意影响!!!!
解决问题先~~~~~~~~~~~
作者: esprit    时间: 2006-04-12 12:25
这两天有了你们,论坛热闹不少啊!
作者: b46    时间: 2006-04-12 12:34
原帖由 布布 于 2006-4-12 11:56 发表



我饿 和小猫有什么必然联系么??????

小猫吃猫粮
8会和你抢食滴

作者: 葱花    时间: 2006-04-12 13:06
我不是杂食动物!
作者: b46    时间: 2006-04-12 13:07
你们这些问题在google上都可以搜到
作者: cfb336    时间: 2006-04-12 13:25
标题: 回复 7楼 布布 的帖子
to 布布 你是编译时提示错误还是运行到这个函数有错误,最好把错误提示贴出来看看
作者: 布布    时间: 2006-04-12 13:30
原帖由 b46 于 2006-4-12 13:07 发表
你们这些问题在google上都可以搜到



我们没有外网 只能上这些技术网站
TO楼上:我写了测试类 目的是提高它的行测试率 不过 写完之后 它根本就没运行到那儿 我觉得是我的方法有错 

测试类的方法:
  public final void testadd(final String[] newData) {
      try {
               String[] st = new String[1];
               Assert.assertNotNull(st);
       } catch (Exception e) {
              e.printStackTrace();
           }
   }

被测试类的方法:
    public final void add(final String[] newData)
             throws FlightException, RemoteException {
        try {
                  data.add(newData);
        } catch (DatabaseException e) {
                 throw new FlightException(e, e.getMessage());
          }
    }

希望有高手给指出 我错在了哪里?是不是真的方法没有用对 如果不对 可否给点提示?
布布先谢谢大家了~~~~~~~
作者: tong0245    时间: 2006-04-12 13:34
原帖由 布布 于 2006-4-12 13:30 发表



我们没有外网 只能上这些技术网站
TO楼上:我写了测试类 目的是提高它的行测试率 不过 写完之后 它根本就没运行到那儿 我觉得是我的方法有错 

测试类的方法:
  public final void testadd(f ...

妹妹别急周末请我吃饭吧 我都给你们搞定
作者: 艾斯尼勒    时间: 2006-04-12 13:36
原帖由 perryhg 于 2006-4-12 04:05 发表
二楼的解释让人觉得如堕云里雾里,你要是不清楚可以保持沉默的啊,瞎搅和无助于互助学习啊,你要是真想帮人家可以自己学会来再来教啊。关于抽象类的问题,我找了篇文章给大家看看,有什么想法可以在这里讨论。

...



汗。。。咋想说明白点东西这么难呢?我觉得我理解啊
觉得我是概念说错还是表述不清?这对我挺重要谢谢

嗯。昨晚咪咪糊糊的,写错了一句话,可我还是觉得挺明白了啊,为什么会看晕呢,这个真 对我挺重要。说说吧老大哪里不对呢?

[ 本帖最后由 艾斯尼勒 于 2006-4-12 13:48 编辑 ]
作者: 葱花    时间: 2006-04-12 13:36
那我呢!!!!!!!!!!!!!!!!
                        哇哇!!!!!!!!!!
                                             我怎么 办啊?
作者: 布布    时间: 2006-04-12 13:37
原帖由 tong0245 于 2006-4-12 13:34 发表

妹妹别急周末请我吃饭吧 我都给你们搞定



我不要搞定~~~~~
我要明白!!!!!
搞不明白就不吃饭!!!!!
哼~~~~
作者: huangxkst    时间: 2006-04-12 15:43
标题: 回复 7楼 布布 的帖子
兄弟,你把错误给大家发上来要不怎么给你答~~~
作者: jemyzhang    时间: 2006-04-12 15:53
妹妹啊,别急,饿坏了就搞不明白了,为了明白,要吃饭!
作者: tong0245    时间: 2006-04-12 15:57
傻妹妹我说过长城不是一天修建的 你们别着急 慢慢来 学习学习基础 很快就明白的。你会发现原来不清楚的东西
突然是那么的简单ok
作者: jemyzhang    时间: 2006-04-12 16:23
这些妹妹太可爱了。
提问:测试大概咋整啊?
回答:你想咋整?整功能健全的,还是整逻辑覆盖的。
再问:那就先整功能的吧
回答:哦,那就先要知道你要测试的玩意有什么功能。比如一个add方法,两个输入参数作为add的两个值,一个返回结果。我们测试呢就先准备两个数,然后调用add方法,把这两个数传入,获得返回结果,跟我们预期的结果比较,比如assertEqual(3,add(1,2)),如果断言未true,就说明但前的add功能是正确的,但是别急,我们还需要一些其它数据测试,玩意我用2和2来测试,断言不等于4了,说明功能不正确,那这个方法就有问题了,你就报告长官,发现问题。
再问:那逻辑覆盖呢:
哦:   这个吗。。。嗯。。。就是说有一个地图上的路啊,在不同的条件下是可以走遍的,现在要你提供些条件,看是否真的能走遍,如果能,而且是那些条件,那么就算通过了,如果所有条件你都用了,却有些没有走到,或者不是哪个条件却走了那条路,说明有逻辑问题了。

哇,老板来了,闪。
以上纯粹肤浅之间,不知可爱的妹妹们对测试能否有些初步的理解。
作者: 白色乌鸦    时间: 2006-04-12 16:43
建议mm们,看看相关入门书籍,应该更好些。
作者: chouy    时间: 2006-04-12 18:28
以下是一些抄来的代码, 挺简单的. 看MM好像刚入门, 学习正好, 就贴上来了.
我们作一个HelloWorld的测试
测试方法:
        HelloWorld.sayHello()是否执行正常,并且结果也符合要求
        HelloWorld.add()方法是否与我们预期一样执行

根据测试方案,我们编写测试案例
        package com.yjsoft.app;
        public class HelloWorld {
                public static void main(String[] args) {
                }
                public String sayHello(){
                        return "Hello world.";
                }
                public int add(int nA,int nB){
                        return nA+nB;
                }
        }

开始为此编写TestCase
        先设置属性,设置Libraries,将Junit.Jar加入
        创建TestCase测试工程
        创建测试案例类
        选择要测试的方法
        编写测试代码:
           package com.yjsoft.test;
        import junit.framework.Assert;
        import junit.framework.TestCase;
        import com.yjsoft.app.HelloWorld;
        public class HelloWorldTest extends TestCase {
                public HelloWorldTest(String arg0) {
                        super(arg0);
                }
                public static void main(String[] args) {
                        junit.swingui.TestRunner.run(HelloWorldTest.class);
                }
                public void testSayHello() {
                        HelloWorld world=new HelloWorld();
                        //Assert.assertNull(world);
                        assertEquals(world.sayHello(),"Hello World");
                }
                public void testAdd() {
                        HelloWorld world=new HelloWorld();
                        //Assert.assertNull(world);
                        Assert.assertEquals(world.add(1,2),3);
                }
        }
       

        测试
        发现失败,方法为sayHello(),看看具体信息“应为Hello word. 却发现 Hello World”
        修改测试函数
           assertEquals(world.sayHello(),"Hello world.");
        测试,通过
作者: chouy    时间: 2006-04-12 19:37
抽象方法是没办法测试的,就像接口没办法测试。---- 为什么? 没代码测个啥呀!
私有类和私有方法是不能测试的。 ----- 为什么? 你又不知道有这个方法!
抽象类是不能实例化的,所以没办法直接测试,但可以间接测试。——测试继承了它的实体类。也可以 MOCK 一个对象(就是自己写个类,继承这个抽象类),然后测试 MOCK 类的方法。
写一个抽象类,如:

  1. abstract class HelloWord
  2. {
  3.       public String add(String s1, String s2) {
  4.             return new String(s1 + s2);
  5.       }
  6. }
复制代码

自己写一个继承它的类:

  1. public class HelloWordSon extends HelloWord
  2. {
  3.        //里面什么都不用写就行了。
  4. }
复制代码

测试方法:

  1. class TestHelloWord extends TestCase
  2. {
  3.        //可以写setUp() 和 tearDown()
  4.        public void testAdd()
  5.        {
  6.                String s1 = "hello ";
  7.                String s2 = "world!";
  8.                HelloWordSon hw = new HelloWorldSon();
  9.                assert.equals(s1 + s2, hw(s1, s2) );
  10.        }
  11. }
复制代码

以上代码是直接在论坛上编的,不保证可运行。只为说明思想。
作者: perryhg    时间: 2006-04-12 21:02
原帖由 艾斯尼勒 于 2006-4-12 13:36 发表



汗。。。咋想说明白点东西这么难呢?我觉得我理解啊
觉得我是概念说错还是表述不清?这对我挺重要谢谢

嗯。昨晚咪咪糊糊的,写错了一句话,可我还是觉得挺明白了啊,为什么会看晕呢,这个真 对我挺重要 ...

我以为你到那个文档里面抄了几句贴过来的呢,也许说得重一些了请你原谅。看出来你是搞教育的了,因为你的解释从理论上来说没有错,不过我个人不太喜欢这样的回答。因为这种纯理论性的解释,对于学习的新人帮助不大,有时候要知其然,更要知其所以然,我觉得我当初学习这些概念的时候,一直有个问题困扰我:究竟什么时候,什么地方应该用抽象类?如果我搞不懂这个道理的,不能把这个知识点用在合适的地方的话,就算把概念背得烂熟于胸,还是等于没学会这个知识点。
作者: 布布    时间: 2006-04-12 21:19
谢谢各位了~~~~
我这周就去买书
好好学习 天天向上~~~
作者: chouy    时间: 2006-04-12 21:25
原帖由 布布 于 2006-4-12 08:47 发表
先谢谢大家了
我对这块儿确实不懂 所以还是希望各位能讲的明白些~~~~~
给大家一个例子 麻烦大家帮我看一下 这个该怎么测试
    public final DataInfo getRecord(final int recNum)
        throws FlightE ...



像以上这种代码,跟本就没必要测,它的正确与否完全取决于它里面调用的这个方法!
只要测试调用的这个方法就行了。

[ 本帖最后由 chouy 于 2006-4-12 21:36 编辑 ]
作者: 艾斯尼勒    时间: 2006-04-12 21:34
原帖由 perryhg 于 2006-4-12 21:02 发表

我以为你到那个文档里面抄了几句贴过来的呢,也许说得重一些了请你原谅。看出来你是搞教育的了,因为你的解释从理论上来说没有错,不过我个人不太喜欢这样的回答。因为这种纯理论性的解释,对于学习的新人帮助不 ...



呵呵,看来教育还是得注重方法,结合代码和实验效果会好些,纯粹说教帮助的确不大,我还得调整




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2