当前位置:编程学习 > JAVA >>

求助:为什么子类(抽象类)要将父类(实体类)中的实例方法重写成抽象方法?

在学习java抽象类的时候看到这样一句话,不太明白:

A class can extend a concrete superclass and override a normal (implemented) method
to make it abstract, why would it be useful?

为什么子类(抽象类)要将父类(实体类)中的实例方法重写成抽象方法?

谁能帮忙解释下,最好能给出一种适用的情况,多谢

实例方法 抽象方法 重写 抽象类 --------------------编程问答-------------------- 我觉得没啥用处。

按理说extends 应该扩展父类的功能,但通过extends 反而让功能萎缩。我觉得没啥意义。
也许用了太多的 子类,后来发现子类有问题,就吧子类改成抽象类,让程序报错,然后一个个的根据报错进行修改吧?



class Test
{
public void print()
{
System.out.println("test print");
}
}

abstract class AbTest extends Test
{
abstract public void print();
}

class SuperTest extends AbTest
{
public void print()
{
System.out.println("Supert printer");
}
}

--------------------编程问答-------------------- 是啊 我也想不出什么正常情况需要这么反着用的  --------------------编程问答-------------------- 不知道楼主学习什么资料,也许这在Java中是一个不好的实践吧,我们没有理由去这么实践的,除非该书本为了将抽象类的讲法标新立异~ --------------------编程问答-------------------- It is useful only when your extended abstract class (sounds weird...) wants to make its extended classes to override the default implementation from the ancestor class.

class Man {
  public void fuck() {
    print ("I fuck girls!");
  }
}

abstract class AbnormalMan extends Man {
  public abstract void fuck();
}

class Gay extends AbnormalMan {
  public void fuck() {
    print("I fuck men!");
  }
}

class BisexualMan extends AbnormalMan {
  public void fuck() {
  } --------------------编程问答--------------------
引用 4 楼 lcf 的回复:
It is useful only when your extended abstract class (sounds weird...) wants to make its extended classes to override the default implementation from the ancestor class.

class Man {
  public void fuck() {
    print ("I fuck girls!");
  }
}

abstract class AbnormalMan extends Man {
  public abstract void fuck();
}

class Gay extends AbnormalMan {
  public void fuck() {
    print("I fuck men!");
  }
}

class BisexualMan extends AbnormalMan {
  public void fuck() {
  }


... stupid system publishes automatically when I accidentally hit Ctrl+Enter, and it never lets me amend what I published!
Well.. you get the idea
class Man {
  public void fuck() {
    print ("I fuck girls!");
  }
}

abstract class AbnormalMan extends Man {
  public abstract void fuck();
}

class Gay extends AbnormalMan {
  public void fuck() {
    print("I fuck men!");
  }
}

class BisexualMan extends AbnormalMan {
  public void fuck() {
    print("I fuck men and women!");
  }
}
--------------------编程问答-------------------- 顶!

引用 5 楼 lcf 的回复:
Quote: 引用 4 楼 lcf 的回复:

It is useful only when your extended abstract class (sounds weird...) wants to make its extended classes to override the default implementation from the ancestor class.

class Man {
  public void fuck() {
    print ("I fuck girls!");
  }
}

abstract class AbnormalMan extends Man {
  public abstract void fuck();
}

class Gay extends AbnormalMan {
  public void fuck() {
    print("I fuck men!");
  }
}

class BisexualMan extends AbnormalMan {
  public void fuck() {
  }


... stupid system publishes automatically when I accidentally hit Ctrl+Enter, and it never lets me amend what I published!
Well.. you get the idea
class Man {
  public void fuck() {
    print ("I fuck girls!");
  }
}

abstract class AbnormalMan extends Man {
  public abstract void fuck();
}

class Gay extends AbnormalMan {
  public void fuck() {
    print("I fuck men!");
  }
}

class BisexualMan extends AbnormalMan {
  public void fuck() {
    print("I fuck men and women!");
  }
}
--------------------编程问答--------------------
引用 5 楼 lcf 的回复:
Quote: 引用 4 楼 lcf 的回复:

It is useful only when your extended abstract class (sounds weird...) wants to make its extended classes to override the default implementation from the ancestor class.

class Man {
  public void fuck() {
    print ("I fuck girls!");
  }
}

abstract class AbnormalMan extends Man {
  public abstract void fuck();
}

class Gay extends AbnormalMan {
  public void fuck() {
    print("I fuck men!");
  }
}

class BisexualMan extends AbnormalMan {
  public void fuck() {
  }


... stupid system publishes automatically when I accidentally hit Ctrl+Enter, and it never lets me amend what I published!
Well.. you get the idea
class Man {
  public void fuck() {
    print ("I fuck girls!");
  }
}

abstract class AbnormalMan extends Man {
  public abstract void fuck();
}

class Gay extends AbnormalMan {
  public void fuck() {
    print("I fuck men!");
  }
}

class BisexualMan extends AbnormalMan {
  public void fuck() {
    print("I fuck men and women!");
  }
}


引用 5 楼 lcf 的回复:
Quote: 引用 4 楼 lcf 的回复:

It is useful only when your extended abstract class (sounds weird...) wants to make its extended classes to override the default implementation from the ancestor class.

class Man {
  public void fuck() {
    print ("I fuck girls!");
  }
}

abstract class AbnormalMan extends Man {
  public abstract void fuck();
}

class Gay extends AbnormalMan {
  public void fuck() {
    print("I fuck men!");
  }
}

class BisexualMan extends AbnormalMan {
  public void fuck() {
  }


... stupid system publishes automatically when I accidentally hit Ctrl+Enter, and it never lets me amend what I published!
Well.. you get the idea
class Man {
  public void fuck() {
    print ("I fuck girls!");
  }
}

abstract class AbnormalMan extends Man {
  public abstract void fuck();
}

class Gay extends AbnormalMan {
  public void fuck() {
    print("I fuck men!");
  }
}

class BisexualMan extends AbnormalMan {
  public void fuck() {
    print("I fuck men and women!");
  }
}
--------------------编程问答--------------------
引用 3 楼 ysjian_pingcx 的回复:
不知道楼主学习什么资料,也许这在Java中是一个不好的实践吧,我们没有理由去这么实践的,除非该书本为了将抽象类的讲法标新立异~


这段话从课件里摘的,课件老师自己做的。。。他上课的时候都没讲这句,直接略过去了,我也没在意,复习的时候发现他竟然以前有道考题就问这个的:

In Java, subclassing is often used to provide missing implementation of a method declared
in an abstract parent class; the subclass thus becomes a concrete class with fully
defined behaviour. The opposite is also allowed: a subclass of the concrete class can be
declared abstract, and some of the parent class methods can be overridden and declared
abstract. Give your ideas on why and when such subclassing can be useful.

P.S. 4楼的回复很直观很暴力

可能这么弄就是为了强迫扩展类去重写方法吧。。。蛋疼啊这题 --------------------编程问答-------------------- 会不会反了啊。应该父类是抽象类,子类去重写方法才对啊。子类弄成抽象类一定意义都没。难道还要再用个子类去继承?抽象类是不能创建实例的啊。 --------------------编程问答-------------------- Object是具体类啊,那么多抽象类都是它的之类。
4楼的例子,不错。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,