抽象方法:在类中没有方法体的方法,就是抽象方法。
抽象类:含有抽象方法的类就叫抽象类。
|||||||||抽象类不能被实例化(new)
为什么要使用抽象方法?
(以下是个人观点)

为在面向对象的编程的思想中,任何事物都可以看做是一个类。例如:每个动物都需要休息,都要睡觉(sleep),而不同的动物有不同的睡觉方法,如,蝙蝠
是倒挂在树上睡,小狗是爬着睡,蛇是盘着睡……等等。由此可以看出,每种动物的睡觉的方式都不一样,但转过头来思考,他们又确实都是在做着同一件事情
(sleep)。因此,在JAVA中引入了抽象类这个概念。就是说,父类中的某些方法不包含任何逻辑(例如上面例子中的sleep方法),并且需要由子类
重写(例如蝙蝠是挂着睡……)。在这种情况下,我们就应该把这些具有共同特征的方法抽象出来,由子类负责这些抽象方法的实现细节。而父类仅提供此方法的名
称和声明、没有方法的主体。因此子类负责重写此方法。所以这就是为什么要使用抽象方法!(个人观点,不知道对不对?)
============================================
如下代码:
-----------------------------
class boar
{
abstract void sleep();
}
-----------------------------
这段代码中的类boar里面有个抽象(abstract)方法sleep(),可以看到这个方法后面没有方法体,而是用一个“;”号结束。那么这种方法就叫做抽象方法。
如果编译这段代码的话,会提示如下错误:
----------------------------------------------------------------
boar.java:1: boar 不是抽象的,并且未覆盖 boar 中的抽象方法 sleep()
class boar
^
1 错误
----------------------------------------------------------------
意思是说:boar这个类不是抽象的。为什么呢?因为前面在给抽象类下定义的时候就说过,含有抽象方法的类就叫抽象类。因此,boar这个类必须也是抽象的!
所以应改为如下代码:
-----------------------------
abstract class boar
{
abstract void sleep();
}
-----------------------------
如果这次编译的话,就不会提示任何错误了。
============================================
来看如下代码:
-------------------------------------------------------------------
abstract class allsleep
{
abstract void sleep();
}
class owl extends allsleep
{
void sleep()
{
    System.out.println("我是猫头鹰,我是站在树上睡的");
}
}
class bat extends allsleep
{
void sleep()
{
    System.out.println("我是蝙蝠,我是倒挂在树上睡的");
}
}
public class newsleep
{
public static void main(String[] sl)
{
    owl objowl=new owl();
    bat objbat=new bat();
    objowl.sleep();
    objbat.sleep();
}
}
-------------------------------------------------------------------
编译不会出错,打印的结果为:
----------------------------
我是猫头鹰,我是站在树上睡的
我是蝙蝠,我是倒挂在树上睡的
----------------------------
但如果把代码改为如下:
-------------------------------------------------------------------
abstract class allsleep
{
abstract void sleep();
}
class owl extends allsleep
{
/*void sleep()
{
    System.out.println("我是猫头鹰,我是站在树上睡的");
}*/
}
class bat extends allsleep
{
/*void sleep()
{
    System.out.println("我是蝙蝠,我是倒挂在树上睡的");
}*/
}
public class newsleep
{
public static void main(String[] sl)
{
    /*owl objowl=new owl();
    bat objbat=new bat();
    objowl.sleep();
    objbat.sleep();*/
}
}
-------------------------------------------------------------------
编译的时候JVM会提示如下:
--------------------------------------------------------------------------
newsleep.java:5: owl 不是抽象的,并且未覆盖 allsleep 中的抽象方法 sleep()
class owl extends allsleep
^
newsleep.java:12: bat 不是抽象的,并且未覆盖 allsleep 中的抽象方法 sleep()
class bat extends allsleep
^
2 错误
--------------------------------------------------------------------------
意思是说:owl类和bat类都没有实现allsleep中的sleep()方法,而只是麻木的继承了过来
因此得到结论:抽象类中的抽象方法必须被实现!
那么为了证实这个结论,再写一段代码,如下:
---------------------------------------------
abstract class allsleep
{
void eat()
{
    System.out.println("我会吃");
}
}
class owl extends allsleep
{
}
class bat extends allsleep
{
}
---------------------------------------------
从上面的代码我们可以看到抽象类allsleep中没有抽象方法,而我们在子类中也没有实现allsleep类中的eat()方法,因此,这便证实了我们上面的结论:抽象类中的抽象方法必须被实现!
=====================================================
话说回来,如果一个子类没有实现父类中的抽象方法呢?
来做个实验吧:
-------------------------------
abstract class allsleep
{
abstract void sleep();
}
class owl extends allsleep
{
}
class bat extends allsleep
{
}
-------------------------------
我们编译这段代码的结果会是怎样的呢?
其实这个实验已经做过了,在上上一个例子里,把owl类和bat类中的内容都屏蔽了,跟这个是一个效果。也就是说:抽象类中的抽象方法必须被实现!
那么如果我们不想实现的话该怎么办呢?很简单,只要把子类也声明为一个抽象类就OK了!
因此我们得到结论:如果一个子类没有实现父类中的抽象方法,则子类也成为了一个抽象类!
最后来总结下:
----------------------------------------------------------------
抽象方法:在类中没有方法体的方法,就是抽象方法。
抽象类:含有抽象方法的类就叫抽象类。
抽象类中的抽象方法必须被实现!
如果一个子类没有实现父类中的抽象方法,则子类也成为了一个抽象类!
抽象类中的普通方法,可以不必实现。

JAVA之抽象类与抽象方法的更多相关文章

  1. 关于Java 实现抽象类的抽象方法的特性的利用---面向切面

    今天看工作看代码突然有了以下设想: /** * Created by zq on 2017/5/25. * 抽象类 */ public abstract class AbstractC { publi ...

  2. 【Java】抽象类与抽象方法

    文章目录 抽象类与抽象方法 abstract关键字的使用 abstract修饰类:抽象类 abstract修饰方法:抽象方法 abstract使用上的注意点: 抽象类的匿名子类 模板方法设计模式 抽象 ...

  3. java中抽象类和抽象方法到底什么关系?请举例说明!

    抽象类和抽象方法什么关系?抽象类中可能有抽象方法,也可能没有抽象方法.那位说,就跟没说一样,那抽象类和抽象方法都叫抽象,他们必定有关系,那关系是什么呢?如果一个类中有抽象方法,它必须得是抽象类. An ...

  4. java中抽象类和抽象方法到底有什么用呢?

    抽象类和抽象方法有什么用呢?马克-to-win:当初sun公司为什么要设计抽象类和抽象方法呢?当你在做车的系统设计时,当你设计车这个通用类时,假如你确认别人实例化车这个通用类没有意义时(不知道是bik ...

  5. java的抽象类和抽象方法(注意查看如何调用抽象类中的非抽象方法)

    抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类.抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类.对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子 ...

  6. Java中抽象类和抽象方法的区别

    抽象方法:在类中没有方法体的方法,就是抽象方法. 抽象类:含有抽象方法的类就叫抽象类. 抽象类中的抽象方法必须被实现! 如果一个子类没有实现父类中的抽象方法,则子类也成为了一个抽象类! 抽象类中的普通 ...

  7. 【JAVA】抽象类,抽象方法

    抽象类不能被实例化,有两个特点: 必须继承才有它的用途: 不能描述对象: 抽象方法: 具体实现由子类决定,最终子类必须实现: 没有方法体: 说明: 抽象类不一定包含抽象方法,抽象方法一定是抽象类.

  8. java中 抽象类和抽象方法

    在面向对象中,所有的对象都是由类来描绘的,但是并不是所有的类都用来描绘对象的,当一个类并不能包含完整的信息来描绘一个具体的对象时,我们把这个类称为抽象类.抽象类除了不完整的描述一个对象之外,其他的功能 ...

  9. 【Java基础】抽象类和抽象方法的总结

    什么是抽象类 抽象类是相同概念实体的一种抽象,Java中用关键字abstract来定义抽象类和抽象方法. 什么是抽象方法 只有方法的声明,没有方法的具体实现的方法. 抽象类和抽象方法的特点 抽象类和抽 ...

随机推荐

  1. Java服务器端消息队列实战

    服务端口监听--报文接收--报文解码--业务处理--报文编码--写回客户端 从服务端与客户端成功握手并产生一个socket后,为了提高吞吐能力,接下来的事情就可以交给多线程去处理. 为了对接入的请求做 ...

  2. [洛谷P4178]Tree

    题目大意:给一棵树,问有多少条路径长度小于等于$k$ 题解:点分治 卡点:无 C++ Code: #include <cstdio> #include <algorithm> ...

  3. 熊猫(i)

    题目描述 熊猫喜欢吃数,熊猫对与每个数都有他独特的评价.具体来说,熊猫对数 xx 的评价是个四元组 (a, b, c, d)(a,b,c,d),计算方式如下: 首先将 xx 写成二进制形式(不含前导零 ...

  4. zjoi2018day1 游记

    3.18 这一天乘车来到衢州,这已经是第四次了,来衢州二中考过两次普及,一次提高,都不是特别好. 到了以后先去了宾馆,是在帝京,和NOIP一样的酒店,连房间都是隔壁,然后一进去就连上了隔壁的WIFI ...

  5. BAT脚本编写教程入门提高篇

    BAT脚本编写教程入门提高篇 批处理文件的参数 批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符“%”. %[1-9]表示参数,参数是指在运行批处理 ...

  6. linux下修改mysql数据库编码后无法启动解决办法

    linux下老版本的Mysql修改数据库编码的方法是 修改my.cnf vi /etc/my.cnf 在[client]下添加 default-character-set=utf8 在[mysqld] ...

  7. 灰姑娘的水晶鞋(NOIP模拟赛Round 7)

    [问题描述] 传说中的水晶鞋有两种颜色:左边的水晶鞋是红色,右边的是蓝色,据说穿上它们会有神奇的力量. 灰姑娘要找到她所有的n双水晶鞋,它们散落在一条数轴的正半轴上,坐标各不相同,每双水晶鞋还有一个权 ...

  8. 小Z爱划水(NOIP信(sang)心(bin)赛)From FallDream

    题目: 小Z在机房.他和其它机房同学都面临一个艰难的抉择,那就是 要不要划水? 每个人都有自己的一个意见,有的人想做题,有的人想划水. 当然,每个人只能选择一个事情做.如果一个人做的事情和他想做的不同 ...

  9. eclipse 导出burpsuite插件包含第三方lib包

    第一步:右键项目点击export: 2.选择Runable JAR file: 点击Finish后会爆出一个错误(Jar export finished with problems. See deta ...

  10. kvm虚拟机最佳实践系列1-kvm宿主机准备

    KVM宿主机配置 系统环境:ubuntu16, bond0 业务网口 bond1 管理网口+存储网口 安装KVM环境支持 sudo apt-get install qemu-kvm sudo apt- ...