但不知道抽象类有会用
下面这个感觉用不用抽象类都一样
/**如果把抽象类去掉也是正确的,那这个抽象类有什么用呢**/
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的。
以上为一点浅见。
如果类中的某个方法的实现需要由子类实现,只需要声明为抽象方法即可(相当于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);
}
}
}
#7
原来如此。那请问实现该接口的类是一定要实现该接口声明的方法的,那么该默认实现有什么用呢?
#8
抽象类是为了屏蔽具体的实现
#9
这里的抽象类好像没什么用啊,没有抽象类也正确,而且使用什么的都一样
#10
等你用到的时候自然就会想到他的作用,不过一般都用接口比较多
#11
如果简单地说,就是为了统一实现标准啊,也就是抽象类公开的方法,其他子类都要按它规定的来,写好了,很帅。
#12
抽象类在多态机制中有用哦
还有一些工具的情况可以用使抽象类
楼主研究下设计模式,一些中间环节的类也可以写成抽象类,可起承上启下作用。
你的这个例子可以从意义上理解,一个shape是一个抽象的事物,而Circles ,Rectangles 圆,三角型是具体的形状。具体形态要有具体的属性与方法,而抽象的事物只需抽象的方法,待具体事物去实现它就可。
还有一些工具的情况可以用使抽象类
楼主研究下设计模式,一些中间环节的类也可以写成抽象类,可起承上启下作用。
你的这个例子可以从意义上理解,一个shape是一个抽象的事物,而Circles ,Rectangles 圆,三角型是具体的形状。具体形态要有具体的属性与方法,而抽象的事物只需抽象的方法,待具体事物去实现它就可。
#13
楼主还不知道多态真正的用处在哪儿。而只是知道形状与三角形、圆形是继承的关系而进行继承的。
而抽象类还有个好处,是可以防止你对抽象类(Shape)实例化,即你不能new Shape(),因为这是没有意义的。
推荐看《headfirst设计模式》,我对多态的理解就是从这开始的。
而抽象类还有个好处,是可以防止你对抽象类(Shape)实例化,即你不能new Shape(),因为这是没有意义的。
推荐看《headfirst设计模式》,我对多态的理解就是从这开始的。
#14
同样的方法,不同的实体类型,方法效果不一样
#15
承上启下,基本共性用借口实现,部分共性用用抽象类实现基本共性接口,最后的具体特性用在子类中体现,参照JDK的很多类,如InputStram类的结构就能看出来。
#1
多态机制中抽象类有着一定的地位。
#2
类是对某些可分类的实体的抽象,比如动物就可以是抽象类,然后猫、狗、猪....就是具体的类了,
抽象类中可以有数据成员和非抽象方法,抽象方面规定了方法签名,功能实现就由子类去实现了。。
抽象类中可以有数据成员和非抽象方法,抽象方面规定了方法签名,功能实现就由子类去实现了。。
#3
你可以想想接口有什么作用
#4
感觉楼上说的还是有点道理的,主要是用于多态的
#5
按照《Thinking in Java》的说法,抽象类是普通的类与接口之间的一种中庸之道。普通类提供的是一般意义的抽象(所有成员都有实现),而接口则提供完全的抽象(没有任何实现)。抽象类允许一部分方法提供实现。
如果类中的某个方法的实现需要由子类实现,只需要声明为抽象方法即可(相当于C++中的纯虚函数)。这时类也随之变为抽象类,但它较接口的优势在于可以定义一些方法的实现。另外,抽象类的字段也可以被子类使用,而接口中的字段都是static和final的。
以上为一点浅见。
如果类中的某个方法的实现需要由子类实现,只需要声明为抽象方法即可(相当于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);
}
}
}
#7
原来如此。那请问实现该接口的类是一定要实现该接口声明的方法的,那么该默认实现有什么用呢?
#8
抽象类是为了屏蔽具体的实现
#9
这里的抽象类好像没什么用啊,没有抽象类也正确,而且使用什么的都一样
#10
等你用到的时候自然就会想到他的作用,不过一般都用接口比较多
#11
如果简单地说,就是为了统一实现标准啊,也就是抽象类公开的方法,其他子类都要按它规定的来,写好了,很帅。
#12
抽象类在多态机制中有用哦
还有一些工具的情况可以用使抽象类
楼主研究下设计模式,一些中间环节的类也可以写成抽象类,可起承上启下作用。
你的这个例子可以从意义上理解,一个shape是一个抽象的事物,而Circles ,Rectangles 圆,三角型是具体的形状。具体形态要有具体的属性与方法,而抽象的事物只需抽象的方法,待具体事物去实现它就可。
还有一些工具的情况可以用使抽象类
楼主研究下设计模式,一些中间环节的类也可以写成抽象类,可起承上启下作用。
你的这个例子可以从意义上理解,一个shape是一个抽象的事物,而Circles ,Rectangles 圆,三角型是具体的形状。具体形态要有具体的属性与方法,而抽象的事物只需抽象的方法,待具体事物去实现它就可。
#13
楼主还不知道多态真正的用处在哪儿。而只是知道形状与三角形、圆形是继承的关系而进行继承的。
而抽象类还有个好处,是可以防止你对抽象类(Shape)实例化,即你不能new Shape(),因为这是没有意义的。
推荐看《headfirst设计模式》,我对多态的理解就是从这开始的。
而抽象类还有个好处,是可以防止你对抽象类(Shape)实例化,即你不能new Shape(),因为这是没有意义的。
推荐看《headfirst设计模式》,我对多态的理解就是从这开始的。
#14
同样的方法,不同的实体类型,方法效果不一样
#15
承上启下,基本共性用借口实现,部分共性用用抽象类实现基本共性接口,最后的具体特性用在子类中体现,参照JDK的很多类,如InputStram类的结构就能看出来。