抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象。抽象类体现的就是一种模板模式的设计,抽象父类可以只定义需要使用的某些方法,把不能实现的某些部分抽象成抽象方法,留给其子类去实现。具体来说,抽象类的使用有以下几点要注意:

  1.抽象方法和抽象类必须使用abstract来修饰,其中抽象方法不能有方法体。

  2.抽象类不能被实例化。

  3.抽象类可以包含成员变量,方法(普通方法或抽象方法),构造器(抽象类的构造器不能用于创建实例,主要是被其子类调用),初始化块,内部类(接口,枚举)这五种成分。

  4.含有抽象方法的类只能定义成抽象类,而抽象类中可以没有抽象方法。

  下面看具体的使用例子:

// 先在文件Animal.java 中定义一个抽象类
package animal;
public abstract class Animal
{
public String name;
public Animal(String name)
{
this.name = name;
}
public abstract void eat();
public abstract void move();
}

然后分别定义三个子类来实现这个抽象父类:

package animal;
public class Dog extends Animal
{
public Dog(String name)
{
super(name);
} public void eat()
{
System.out.println(name + " eat meat and grass.");
} public void move()
{
System.out.println(name + " move with legs.");
} } package animal;
public class Bird extends Animal
{
public Bird(String name)
{
super(name);
} public void eat()
{
System.out.println(name + " eat insect.");
} public void move()
{
System.out.println(name + " move with wings.");
} } package animal;
public class Fish extends Animal
{
public Fish(String name)
{
super(name);
} public void eat()
{
System.out.println(name + " eat algae.");
} public void move()
{
System.out.println(name + " move with tail.");
} }

  可以看到三个子类继承了父类的一个成员变量name, 并且分别实现了两个抽象方法 eat() 和 move(). 然后我们定义一个测试类,并运行结果:

package animal;
public class Summary
{
public static void main(String[] args)
{
Dog animal1 = new Dog("Shepherd");
Bird animal2 = new Bird("Sparrow");
Fish animal3 = new Fish("carp");
System.out.println(animal1.name);
animal1.eat();
animal1.move();
System.out.println(animal2.name);
animal2.eat();
animal2.move();
System.out.println(animal3.name);
animal3.eat();
animal3.move();
}
} 运行结果如下: Shepherd
Shepherd eat meat and grass.
Shepherd move with legs.
Sparrow
Sparrow eat insect.
Sparrow move with wings.
carp
carp eat algae.
carp move with tail.

  那么初步的抽象类的使用就是这样了,具体的细节还需要去多看书多实践。

         

JAVA中抽象类的使用的更多相关文章

  1. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

  2. 关于JAVA中抽象类和接口的区别辨析

    今天主要整理一下新学习的有关于Java中抽象类和接口的相关知识和个人理解. 1 抽象类 用来描述事物的一般状态和行为,然后在其子类中去实现这些状态和行为.也就是说,抽象类中的方法,需要在子类中进行重写 ...

  3. Java中抽象类也能实例化

    在Java中抽象类真的不能实例化么? 在学习的过程中,发现了一个问题,抽象类在没有实现所有的抽象方法前是不可以通过new来构建该对象的,但是抽象方法却是可以有自己的构造方法的.这样就把我搞糊涂了,既然 ...

  4. Java中抽象类也能实例化.RP

    在Java中抽象类真的不能实例化么? 在学习的过程中,发现了一个问题,抽象类在没有实现所有的抽象方法前是不可以通过new来构建该对象的,但是抽象方法却是可以有自己的构造方法的.这样就把我搞糊涂了,既然 ...

  5. Java 中抽象类与接口的区别

    TypeScript 中的接口,有点类似抽象类的概念.Java 中抽象类属于包含属性与抽象行为,而接口通常只是抽象行为.抽象类可以实现模板模式. 参考 https://www.cnblogs.com/ ...

  6. Java中抽象类和接口的用法和区别

    一.抽象类 1.抽象类 包含一个抽象方法的类就是抽象类 2.抽象方法 声明而未被实现的方法,抽象方法必须使用abstract关键词字声明 public abstract class People { ...

  7. java中抽象类的定义和使用

    java虽然比较简单,但是细节的知识点还是很多的,现在,介绍一下抽象类的定义和实现基础. 指的是在类中定义方法,而不去实现它,而在它的子类中去具体实现,继承抽象类的子类必须实现父类的抽象方法,除非子类 ...

  8. java中抽象类跟接口的区别

    额,好吧,本来是打算转载些神马的,但是搜资料的过程中发现了一个专注与java的人,那就关注啦,以后多进他blog学习学习:http://www.cnblogs.com/chenssy/p/337670 ...

  9. Java中抽象类和接口的区别?

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

随机推荐

  1. 如何设置eclipse 右键new的菜单

    如何设置eclipse 右键new的菜单 在使用eclipse进行开发的时候,开发人员一般使用File-new来创建项目或文件,但常常发现,默认右键new选项里很多选项极少会用到,而一些常用的选项又没 ...

  2. spring boot定制Jackson ObjectMapper,为什么不生效

    先说结论: 项目中定制了spring 的redisTemplate,而这个template没有使用我自定义的Jackson ObjectMapper.所以不生效. 下面是详细过程: 起因是spring ...

  3. 【面试题】由HashMap引发的一系列追问

    HashMap和HashTable的区别 同:HashMap和Hashtable都实现了Map接口. 异:HashMap允许null的键值对,非同步的,非线程安全的,效率高: HashTable不允许 ...

  4. 学习React系列(二)——深入了解JSX

    1.JX实际上是React.createElement(component,props,...children)的语法糖 2.JSX判断是否为react组件的依据是标签首字母为大写(所以要求用户自定义 ...

  5. 列表(list)之三 -如何较为均匀的将任意字符串按指定组数分组,方差最少

    当字符串的长度不是份数的整数倍时如何均匀地分割,例如:长度为11的字符串要分割成4份,有很多种分法,比如3, 3, 3, 2(前3个字符一份,中间3个一份,再中间3个一份,最后2个一份)这种是比较均匀 ...

  6. js数据结构之栈、队列(数据结构与拉火车游戏)

    1.js实现队列的数据结构(先进先出) function Queue (array) { if(Object.prototype.toString.call(array)!="[object ...

  7. 如何降低移动APP的开发成本

    在当下竞争激烈的商业世界中,移动APP开发是您业务的有利补充.移动APP可通过吸引新客户和保留现有客户,帮助公司成功开展业务.定制一个属于自己公司的移动APP扮演着重要角色,手机APP可以说通过轻松处 ...

  8. [LeetCode] Reach a Number 达到一个数字

    You are standing at position 0 on an infinite number line. There is a goal at position target. On ea ...

  9. [Ubuntu 16.04 LTS ]屏幕分辨率 Unknown display

    新装完Ubuntu 16.04 LTS 通过System settings-->Displays 设置屏幕分辨率 显示"Unknown display",选择后无反应,并且屏 ...

  10. [ Java学习基础 ] Java的封装性与访问控制

    Java面向对象的封装性是通过对成员变量和方法进行访问控制实现的,访问控制分为4个等级:私有.默认.保护和公有,具体规则如下表: 1.私有级别 私有级别的关键字是private,私有级别的成员变量和方 ...