抽象类有什么用?

时间:2021-09-03 02:47:09
感觉 Java 中的抽象类和 C++ 中的模板相似
但不知道抽象类有会用

下面这个感觉用不用抽象类都一样

/**如果把抽象类去掉也是正确的,那这个抽象类有什么用呢**/
abstract class Shape         //抽象类
{
abstract double area();   //抽象方法
}
class Circles extends Shape    //继承抽象类
{
double radius;
double area()         //实现抽象类的方法
{
return 3.14 * radius * radius;
}
}
class Rectangles extends Shape      //继承抽象类
{
double length;
double width;
public double area()        //实现抽象类的方法
{
return length * width;
}
}
class Ladders extends Shape     //继承抽象类
{
double length;
double width;
double height;
public double area()       //实现抽象类的方法
{
return (length + width) * height / 2;
}
}

public class AbstractShapeDemo_4_22
{
public static void main(String[] args)
{
Circles c = new Circles();
c.radius = 2;
System.out.println(c.area());

Rectangles r = new Rectangles();
r.length = 4;
r.width = 3;
System.out.println(r.area());

Ladders l = new Ladders();
l.length = 4;
l.width = 3;
l.height = 2;
System.out.println(l.area());
}
}

15 个解决方案

#1


多态机制中抽象类有着一定的地位。

#2


类是对某些可分类的实体的抽象,比如动物就可以是抽象类,然后猫、狗、猪....就是具体的类了,
抽象类中可以有数据成员和非抽象方法,抽象方面规定了方法签名,功能实现就由子类去实现了。。

#3


你可以想想接口有什么作用

#4


感觉楼上说的还是有点道理的,主要是用于多态的

#5


按照《Thinking in Java》的说法,抽象类是普通的类与接口之间的一种中庸之道。普通类提供的是一般意义的抽象(所有成员都有实现),而接口则提供完全的抽象(没有任何实现)。抽象类允许一部分方法提供实现。
如果类中的某个方法的实现需要由子类实现,只需要声明为抽象方法即可(相当于C++中的纯虚函数)。这时类也随之变为抽象类,但它较接口的优势在于可以定义一些方法的实现。另外,抽象类的字段也可以被子类使用,而接口中的字段都是static和final的。
以上为一点浅见。

#6


jdk1.8中接口可以有默认实现:


interface Queue {
        Message read();
        void delete(Message message);
        void deleteAll() default {
                Message message;
                while ((message = read()) != null) {
                        delete(message);
                }
        }
}

引用 5 楼  的回复:
按照《Thinking in Java》的说法,抽象类是普通的类与接口之间的一种中庸之道。普通类提供的是一般意义的抽象(所有成员都有实现),而接口则提供完全的抽象(没有任何实现)。抽象类允许一部分方法提供实现。
如果类中的某个方法的实现需要由子类实现,只需要声明为抽象方法即可(相当于C++中的纯虚函数)。这时类也随之变为抽象类,但它较接口的优势在于可以定义一些方法的实现。另外,抽象类的字段也可……

#7


引用 6 楼  的回复:
jdk1.8中接口可以有默认实现:

Java code

interface Queue {
        Message read();
        void delete(Message message);
        void deleteAll() default {
                Message message;
                wh……


原来如此。那请问实现该接口的类是一定要实现该接口声明的方法的,那么该默认实现有什么用呢?

#8


抽象类是为了屏蔽具体的实现

#9


这里的抽象类好像没什么用啊,没有抽象类也正确,而且使用什么的都一样

#10


等你用到的时候自然就会想到他的作用,不过一般都用接口比较多

#11


如果简单地说,就是为了统一实现标准啊,也就是抽象类公开的方法,其他子类都要按它规定的来,写好了,很帅。

#12


抽象类在多态机制中有用哦
还有一些工具的情况可以用使抽象类
楼主研究下设计模式,一些中间环节的类也可以写成抽象类,可起承上启下作用。

你的这个例子可以从意义上理解,一个shape是一个抽象的事物,而Circles ,Rectangles 圆,三角型是具体的形状。具体形态要有具体的属性与方法,而抽象的事物只需抽象的方法,待具体事物去实现它就可。

#13


    楼主还不知道多态真正的用处在哪儿。而只是知道形状与三角形、圆形是继承的关系而进行继承的。

    而抽象类还有个好处,是可以防止你对抽象类(Shape)实例化,即你不能new Shape(),因为这是没有意义的。

    推荐看《headfirst设计模式》,我对多态的理解就是从这开始的。

#14


同样的方法,不同的实体类型,方法效果不一样

#15


承上启下,基本共性用借口实现,部分共性用用抽象类实现基本共性接口,最后的具体特性用在子类中体现,参照JDK的很多类,如InputStram类的结构就能看出来。

#1


多态机制中抽象类有着一定的地位。

#2


类是对某些可分类的实体的抽象,比如动物就可以是抽象类,然后猫、狗、猪....就是具体的类了,
抽象类中可以有数据成员和非抽象方法,抽象方面规定了方法签名,功能实现就由子类去实现了。。

#3


你可以想想接口有什么作用

#4


感觉楼上说的还是有点道理的,主要是用于多态的

#5


按照《Thinking in Java》的说法,抽象类是普通的类与接口之间的一种中庸之道。普通类提供的是一般意义的抽象(所有成员都有实现),而接口则提供完全的抽象(没有任何实现)。抽象类允许一部分方法提供实现。
如果类中的某个方法的实现需要由子类实现,只需要声明为抽象方法即可(相当于C++中的纯虚函数)。这时类也随之变为抽象类,但它较接口的优势在于可以定义一些方法的实现。另外,抽象类的字段也可以被子类使用,而接口中的字段都是static和final的。
以上为一点浅见。

#6


jdk1.8中接口可以有默认实现:


interface Queue {
        Message read();
        void delete(Message message);
        void deleteAll() default {
                Message message;
                while ((message = read()) != null) {
                        delete(message);
                }
        }
}

引用 5 楼  的回复:
按照《Thinking in Java》的说法,抽象类是普通的类与接口之间的一种中庸之道。普通类提供的是一般意义的抽象(所有成员都有实现),而接口则提供完全的抽象(没有任何实现)。抽象类允许一部分方法提供实现。
如果类中的某个方法的实现需要由子类实现,只需要声明为抽象方法即可(相当于C++中的纯虚函数)。这时类也随之变为抽象类,但它较接口的优势在于可以定义一些方法的实现。另外,抽象类的字段也可……

#7


引用 6 楼  的回复:
jdk1.8中接口可以有默认实现:

Java code

interface Queue {
        Message read();
        void delete(Message message);
        void deleteAll() default {
                Message message;
                wh……


原来如此。那请问实现该接口的类是一定要实现该接口声明的方法的,那么该默认实现有什么用呢?

#8


抽象类是为了屏蔽具体的实现

#9


这里的抽象类好像没什么用啊,没有抽象类也正确,而且使用什么的都一样

#10


等你用到的时候自然就会想到他的作用,不过一般都用接口比较多

#11


如果简单地说,就是为了统一实现标准啊,也就是抽象类公开的方法,其他子类都要按它规定的来,写好了,很帅。

#12


抽象类在多态机制中有用哦
还有一些工具的情况可以用使抽象类
楼主研究下设计模式,一些中间环节的类也可以写成抽象类,可起承上启下作用。

你的这个例子可以从意义上理解,一个shape是一个抽象的事物,而Circles ,Rectangles 圆,三角型是具体的形状。具体形态要有具体的属性与方法,而抽象的事物只需抽象的方法,待具体事物去实现它就可。

#13


    楼主还不知道多态真正的用处在哪儿。而只是知道形状与三角形、圆形是继承的关系而进行继承的。

    而抽象类还有个好处,是可以防止你对抽象类(Shape)实例化,即你不能new Shape(),因为这是没有意义的。

    推荐看《headfirst设计模式》,我对多态的理解就是从这开始的。

#14


同样的方法,不同的实体类型,方法效果不一样

#15


承上启下,基本共性用借口实现,部分共性用用抽象类实现基本共性接口,最后的具体特性用在子类中体现,参照JDK的很多类,如InputStram类的结构就能看出来。