抽象类

1.1抽象类概述

一个动物类中,我们创建对象时会去new一个动物;但是我们不应该直接创建动物这个对象,因为动物本身就是抽象的,没有动物这种实例,我们创建的应该是一个具体的动物类,比如猫、狗等动物这种实际的类;而且动物这个抽象的类不应该有具体的方法,因为只有具体的某一种动物才有具体的方法,所以这种抽象的类中应该也只有一个抽象的方法名,例如吃,睡等;而没有具体的方法(吃鱼,吃骨头)。

在Java中,一个没有方法体的方法应该被定义为抽象方法;而类中如果有抽象方法,那么这个类就必须定义为抽象方法

抽象类的关键字是abstract。

我们通过代码来对抽象类做进一步了解:

//我们先来创建一个动物类,再加入一个没有方法体的方法
public class Animals{
    public void eat();
}

当我们创建一个动物类,再加入一个没有方法体的方法时,系统会报错:

系统提示我们:该方法缺失方法体,或者将其声明为抽象类。

我们并不想要方法体,那么我们就将此方法定义为抽象方法,但是我们发现系统又报错了:

方法上的提示是:当前的抽象方法没有在抽象类中;

类上的提示是:Animals类必须声明为抽象类,或者实现类中抽象的方法;

根据这两次的提示,我们可以应证了:如果一个类中含有抽象方法,这个类就必须定义为抽象类

当我们给类加上abstract关键字后,系统不再报错:

1.2抽象类的特点

  • 抽象类和抽象方法必须有abstract关键字进行修饰
  • 抽象类不能直接实例化,需要通过子类进行实例化
  • 抽象类中不一定有抽象方法,但有抽象方法的一定是抽象类
  • 抽象类的子类必须全部重写抽象类的抽象方法,要么子类本身也是抽象类

我们通过代码对抽象类的特点进一步了解:

public abstract class Animals{
//抽象类中可以没有方法
}
public abstract class Animals{
    //抽象类中可以有其他方法
      public void sleep(){
    System.out.println("睡觉");
}
}
public abstract class Animals{
   //有抽象方法的一定是抽象类
    public abstract void eat();
}

关于抽象类的多态

我们创建一个抽象类和其子类,我们发现系统提示子类必须重写父类的抽象方法或者声明为抽象类

我们先来重写父类的抽象方法

当我们在子类中重写父类的抽象方法后,不再报错。

如果我们子类中还是不想重写父类的方法怎么办呢?那就将子类也变成抽象类!

我们尝试对抽象类进行实例化:

系统提示Animals类为抽象类无法被实例化;

我们只有通过子类的实例化来对父类变量进行初始化


1.3抽象类的成员特点

  • 抽象类中可以有成员变量(变量、常量)、成员方法(抽象方法:限定子类必须完成某些动作;非抽象方法:提高代码的复用性)
  • 抽象类中可以有构造方法(有参、无参),作用是用于子类访问父类数据的初始化

原文地址:http://www.cnblogs.com/CQliuwei/p/16929815.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性