黑马程序员技术交流社区

标题: 覆盖的迷惑啊 [打印本页]

作者: 杨华东    时间: 2012-10-16 13:01
标题: 覆盖的迷惑啊
本帖最后由 杨华东 于 2012-10-21 20:11 编辑

class A {
   public int method1(int a, int b) {
      System.out.println("我马上就被抽象方法覆盖了");
                                                  }
}
abstract class B extends A
{
public  abstract  int  method1(int a,int b);//子类覆盖父类的方法。。。郁闷啊 这样也算覆盖吗????
}
class Test2
{
public static void main(String[] args)
{
  
}
}

揭迷惑啊。。。。。其大神
作者: 李贺晓    时间: 2012-10-16 14:14
class A
{
   public void method1(int a, int b)
   {
      System.out.println("我马上就被抽象方法覆盖了");
    }
}
abstract class B extends A
{
public  abstract   void method1(int a,int b);//子类覆盖父类的方法
}
class Test2
{
public static void main(String[] args)
{
//B b=new B();
//System.out.println(b.method1());
}
}
首先你的方法定义都错误了,methond1定于成int类型的方法,必须要有返回值的;
抽象类是无法被实例化的。。。。
抽象类中的方法要是被调用的话,必须被继承并实现,才能进行调用,在Test2中,如果你不对B进行实例话,并调用methond1方法的话,jvm是不会报错的
但是如果你在Test2中对B进行实例化,并调用methond1方法,就不行了,会提示你‘B是抽象的,无法进行实例化’
但是这种继承方法是完全正确的

作者: 杨华东    时间: 2012-10-16 18:23
本帖最后由 杨华东 于 2012-10-16 18:26 编辑
李贺晓 发表于 2012-10-16 14:14
class A
{
   public void method1(int a, int b)


方法没错啊  那错了??抽象类B作为非抽象A的子类 方法覆盖根本没错!!!
你说的哪个方法必须要有返回值类型的??郁闷
作者: 梁世喜    时间: 2012-10-16 18:35
class A {
   public int method1(int a, int b) {
      System.out.println("我马上就被抽象方法覆盖了");
                                                  }
}

这个方法不是要返回值吗、、
作者: 杨华东    时间: 2012-10-16 18:40
梁世喜 发表于 2012-10-16 18:35
class A {
   public int method1(int a, int b) {
      System.out.println("我马上就被抽象方法覆盖了") ...

给啦。。。不是void嘛   晕
作者: 李贺晓    时间: 2012-10-16 22:32
杨华东 发表于 2012-10-16 18:23
方法没错啊  那错了??抽象类B作为非抽象A的子类 方法覆盖根本没错!!!
你说的哪个方法必须要有返回值 ...

抽象类B作为非抽象类A的子类,方法覆盖是没错,但是你覆盖的这个方法是没法使用的,讲解抽象方法的时候不是有一个,抽象方法必须被重写后才能使用的啊,而且抽象类不能被实例化的
作者: 邹海洋    时间: 2012-10-17 01:20
原来抽象类可以继承非抽象类,把一个非抽象方法变为抽象方法,只要参数列表不变,仍然是覆盖。学习了




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