请问,Java抽象类具体有什么用处?

比如这个例子

abstract class Animal //定义抽象类
{
String str;
Animal(String s) //定义抽象类的一般方法
{
str=s;
}
abstract void eat(); //定义抽象方法
}
class Horse extends Animal //定义继承Animal的子类
{
String str;
Horse(String s)
{
super(s); //调用父类的构造方法
}
void eat() //重写父类的抽象方法
{
System.out.println("马吃草料!");
}
}
class Dog extends Animal
{
String str;
Dog(String s)
{
super(s);
}
void eat()
{
System.out.println("狗吃骨头!");
}
}
class test
{
public static void main(String args[])
{
Horse Horse1 = new Horse("马");
Dog Dog1 = new Dog("狗");
Horse1.eat();
Dog1.eat();
}
}
运行结果:
马吃草料!
狗吃骨头!

不使用抽象类也能得到一样的运行结果,为什么还要先定义抽象类呢?

因为这个例子根本就没有体现出多态。
现在来写一个画板程序,在一个面板上可以画多种形状,如圆形、正方形、三角形。
定义一个面板类,该类负责将形状画出来,也就是说,它有一个方法接收一个形状的参数。
public class DrawPanel {
public void draw(YuanXing yx) {
//画圆
}
}
问题来了,我要画一个正方形,难道我又要定义一个draw(ZhengFangXing zfx)这么一个方法?假设这个面板可以画几十种形状,难道你要定义几十个这样的方法?那不蛋疼啊。
正方形,圆形,三角形都是形状,所以应该抽象出一个形状的类。
public abstract class Graphics{
public abstract void draw();//形状负责把自己画出来,自己是什么样的只有自己知道
}
画板的draw方法的参数改成
public void draw(Graphics g){
g.draw();
}

什么正方形,圆形,三角形只要继承那个Graphics类就可以了,然后实现draw方法,将具体的形状传给DrawPanel的draw就可以画出对应的形状出来。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-21
假设我有这么一个类,他有一个喂养动物的方法,方法的参数就是他要喂的动物,那么我可以这么写
class Man1{
void feed(Animal a){
a.eat();
}
}
如果没有这个抽象类,那就只能分开写了
class Man2{
void feed(Dog d){d.eat();}
void feed(Horse h){h.eat();}
}
想象一下,假如继续扩展动物类的实现,有更多动物了,Man1还是只要一个方法,Man2却要跟着扩展重载N多方法,这就是抽象和接口的优势
第2个回答  2011-11-22
抽象类和接口的定义,就是为了定义一个统一的调用方法的标准,所有在这个抽象类或者接口下派生的子类,都可以通过这个抽象类或接口进行统一的调用,

最典型的就是数据库接口了,现在的数据库层出不穷,现在的java.sql包下把connection statment,resultset都定义好了,新数据库出来,只要是实现了这些抽象的方法,大家写的数据库查询语句就可以一直沿用下去,不会造成新出来一个数据库就学习新类的混乱,也保证了开发知识的延续性,

其实这和现实中的好多通讯硬件一样的,就像大家一起制定了以太网的通讯协议,在协议之后不管出了多少网卡,具体里面的设计是怎样的,都是插上就可以用了,

抽象类,接口实际上就是标准,为了具体的实现定义好的标准而已

抽象类的作用是什么?
1、在面向对象方法中,抽象类主要用来进行类型隐藏。构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许...

java中抽象类的存在有什么意义?
java中抽象类更利于代码的维护和重用。抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。具体分析如下:1.因为抽象类不能实例化对象,所以必须要有子类来实现它之后才能使用。这样就可以把一些具有相同属性和方法的组件进行抽象,这样更...

如何解读java抽象类的作用和意义?
具体来说,抽象类能够准确地模拟业务领域,提供一个高层次的描述,包含类型与功能。这使得开发者能以更抽象的概念来思考问题,从而提高代码的可读性和维护性。抽象类的另一个重要作用是为具体实现类提供指导。通过继承抽象类,具体实现类需要遵循重写(override)规则,确保实现的逻辑一致性。这不仅促进了代...

如何生动的解释为什么java中要用抽象类?
在Java中,抽象类的使用是为了在设计模式中实现代码的重用和抽象化。抽象类主要是用来将差异性的方法抽象化,由子类进行扩展实现;共同性的方法具体化,由所有子类继承实现。抽象类允许定义共同的属性和行为,然后由不同的子类根据需要进行特定的实现。抽象类的定义中使用了abstract关键字,表明这是一个抽象...

在java中,什么是抽象类和抽象方法,创建有何作用
抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象。当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract。 在抽象类中的成员方法可以包括一般方法和抽象方法。抽象方法就是以abstract修...

java知识点丨java抽象类的作用是什么?
探讨抽象类在Java中的作用 在Java编程语言中,抽象类扮演着核心角色,为开发者提供了一种灵活的机制来定义共享行为和属性。理解抽象类的关键在于其与普通类和接口的区别。首先,让我们聚焦于抽象类的作用。抽象类允许我们定义一组共有的方法和属性,这些在子类中实现。当多个类拥有共同的行为和属性时,...

java中抽象类和接口的区别?
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。 通常在编程语句中用 abstract 修饰的类是抽象类。在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。 抽象类是不完整的,它只能...

java抽象类继承具体类有什么用
这个用处是很大的啊。1、抽象类与接口紧密相关,它们不能示例化,并且常常部分实现或根本不实现。抽象类和接口之间的一个主要差别是:类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承。从抽象类派生的类仍可实现接口。2、具体应用时,可以在创建组件时使用抽象类,因为它们使您得以在...

什么是抽象类?抽象类有什么作用?
作用:通常在编程语句中用 abstract 修饰的类是抽象类。在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。抽象类里面可以有非抽象方法但接口里只能有抽象方法 声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于...

java抽象是什么意思?
抽象类用于表示一些具有类似特征的对象或者行为,接口用于定义一些规范或者契约和实现的约束。抽象类强调从一般到具体,接口强调从具体到一般。在软件工程领域中,设计模式的核心思想就是抽象和封装,通过将系统中类和对象之间的交互关系抽象出来,并将其封装在一个模式中,使得代码具有更好的灵活性和可扩展性...

相似回答