http://blog.csdn.net/liujun13579/article/details/7737667

现实世界中,人们表征世界时,会把现实世界中的很多类具有相同特征的事物归为一个抽象类。比如水果是许多植物果实的总称,我们可以定义一个苹果类、定义一个西瓜类,可以实例化一个苹果对象,可以实例化一个西瓜对象,我们也可以定义一个水果类,但是你无法实例化一个水果对象,因为水果的实例必定是某个具体的植物果实,这时候,水果类就是一个抽象类,水果类可以被苹果类继承扩展,可以被西瓜类继承扩展,这是水果类的唯一用途。

又比如,如果进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

抽象类的定义形式:

一般格式如下:

abstract  class  类名{

类体

}

说明:

l  抽象类是不能直接实例化对象的类。也即抽象类不能使用new运算符去创建对象。

l  抽象类一般包括一个或几个抽象方法。所谓抽象方法需在abstract修饰符进行修饰,抽象方法只有方法的声明部分,没有具体的方法实现部分。抽象类的子类必须重写父类的抽象方法,才能实例子化,否则子类也是一个抽象类。

l    抽象类中不一定包含抽象方法,但是包含抽象方法的类必须说明为抽象类。

举例:Dog类继承于抽象类Animal。

abstract class  Animal{

String   name;

Animal(Stringname){         //非抽象方法

this.name=name;

}

void getname(){            //非抽象方法

System.out.println("Animal's name is"+name);

}

abstract void  move();            //      抽象方法,用abstract 修饰

}

class Dog extends Animal{

intage;

Dog(String name,int age){

super(name);

this.age=age;

}

void  move(){

System.out.println("Dog  is running!");

}

void getage(){

System.out.println("Dog is"+age+"  years  old");

}

}

Public class AbstractDemo{

public static void main(String args[]){

Dogd=new Dog("wangwang",5);

d.move();

d.getname();

d.getage();

}

}

程序运行结果:

Dog is  running!

Animal's name is wangwang

Dog is  5  years old

举例二、具有启动(startUp)方法的抽象车辆类Car,其每种具体子类都必须实现其自己的、专属于某种类型车辆的具体启动(startUp)方法

//定义抽象类Car

abstract class Car {

//定义抽象方法startUp

public abstract void startUp();

}

//定义抽象类Audi并使该类继承自Car

abstract class Audi extends Car{

//定义抽象方法turbo

public abstract void turbo();

}

//定义非抽象类Audi_A6继承自Audi

class Audi_A6 extends Audi{

//实现startUp方法

public void startUp()    {

System.out.println("调用了奥迪A6的启动功能!!!");

}

//实现turbo方法

public void turbo()  {

System.out.println("调用了奥迪A6的加速功能!!!");

}

}

//定义非抽象类Audi_A8继承自Audi

class Audi_A8 extends Audi{

//实现startUp方法

public void startUp(){

System.out.println("调用了奥迪A8的启动功能!!!");

}

//实现turbo方法

public void turbo(){

System.out.println("调用了奥迪A8的加速功能!!!");

}

}

public class AbstractClassDemo{

public static void main(String[] args) {

//创建Audi_A6对象并使该类引用a6指向该对象

Audi_A6 a6=new Audi_A6();

//调用Audi_A6对象中的方法

a6.startUp();

a6.turbo();

//创建Audi_A8对象并使该类引用a8指向该对象

Audi_A8 a8=new Audi_A8();

//调用Audi_A8对象中的方法

a8.startUp();

a8.turbo();

}

}

程序执行结果:

调用了奥迪A6的启动功能!!!

调用了奥迪A6的加速功能!!!

调用了奥迪A8的启动功能!!!

调用了奥迪A8的加速功能!!!

转:二十、java的抽象类的更多相关文章

  1. Java学习笔记二十:Java中的内部类

    Java中的内部类 一:什么是内部类: (1).什么是内部类呢? 内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. (2).那为什么要将一个类定 ...

  2. day 25 二十五、抽象类、多态、鸭子、反射、异常处理

    一.接口思想 1.接口:建立关联的桥梁,方便管理代码 python中没有接口语法 def jiao(): pass def chi(): pass def pao(): pass # 清晰知道操作的功 ...

  3. PHP学习笔记二十八【抽象类】

    <?php //定义一个抽象类.主要用来被继承 //如果一个类继承了抽象类,则它必须实现该抽象类的所有抽象方法(除非它自己也是抽象类) // abstract class Animal{ pub ...

  4. 聊聊高并发(二十五)解析java.util.concurrent各个组件(七) 理解Semaphore

    前几篇分析了一下AQS的原理和实现.这篇拿Semaphore信号量做样例看看AQS实际是怎样使用的. Semaphore表示了一种能够同一时候有多个线程进入临界区的同步器,它维护了一个状态表示可用的票 ...

  5. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  6. JAVA基础知识总结:一到二十二全部总结

    >一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ...

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

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

  8. 三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)

    摘自 http://blog.csdn.net/liujun13579/article/details/7773945 三十二.Java图形化界面设计--布局管理器之CardLayout(卡片布局) ...

  9. 聊聊高并发(二十九)解析java.util.concurrent各个组件(十一) 再看看ReentrantReadWriteLock可重入读-写锁

    上一篇聊聊高并发(二十八)解析java.util.concurrent各个组件(十) 理解ReentrantReadWriteLock可重入读-写锁 讲了可重入读写锁的基本情况和基本的方法,显示了怎样 ...

  10. JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题

    JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...

随机推荐

  1. Gerrit 删除项目

    今天手滑把一个Gerrit上的项目epa写成了epp,想找个重命名的地方也找不到...到网络上搜索了下,发现都是改数据库的,然后就进入的数据库: $ ssh -p 29418 10.27.149.22 ...

  2. ios NSHashTable & NSMapTable

    在ios开发中大家用到更多的集合类可能是像NSSet或者NSDictionary,NSArray这样的.这里要介绍的是更少人使用的两个类,一个是NSMapTable,另一个是NSHashTable. ...

  3. jenkins(二)项目构建

    通过上一篇“jenkins(一)集成环境搭建示例”,已经完成了jenkins的安装,基本配置,启动,下面继续小结jenkins使用 一.jenkins系统配置 访问jenkins,点击系统管理-> ...

  4. ibatis+spring+cxf+mysql搭建webservice

    首先需必备:mysql.myeclipse6.5.apache-cxf-2.6.2 一.建数据库,库名:cxf_demo:表名:book CREATE DATABASE `cxf_demo`  --数 ...

  5. Lua数组排序

    代码 network = { {name = "grauna", IP = "210.26.30.34"}, {name = "arraial&quo ...

  6. 关于C++对汉字拼音的处理——终结篇

    以前写过了3个博文,都是关于汉字转拼音的,后来发现都不是很“完美”的解决方案,第一个和第二个利用的unicode编码的范围进行确定汉字的拼音,但是难免有遗漏,这个在后面的实践中发现的,后来第三个方法是 ...

  7. 九度OJ 1019 简单计算器 -- 2006年浙江大学计算机及软件工程研究生机试真题

    题目地址:http://ac.jobdu.com/problem.php?pid=1019 题目描述:     读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. 输入: ...

  8. 浅谈.prop() 和 attr() 的区别

    今天编码时遇到一个问题,通过后台查询的数据设置前端checkbox的选中状态,设置选中状态为.attr('checked','true');没有问题,但是当数据重新加载时,checkbox应清空即所有 ...

  9. [C#]『PLINQ』任务并行库使用小计

    并行 LINQ (PLINQ) 是 LINQ to Objects 的并行实现. PLINQ 实现完整的 LINQ 标准查询运算符集作为 T:System.Linq 命名空间的扩展方法,并具有用于并行 ...

  10. css reset浅谈

    我们都知道,web开发中浏览器兼容性是困扰很多开发者的一个问题.所谓兼容性问题,即不同浏览器对同一段代码有不同的解析效果.而我们的需求往往是无论用户使用何种浏览器查看我们的网站,都应该获得相同或相近的 ...