一、基础概念

  抽象事物,是若没有具体的信息可以描述这个事物,这个事物可以称为抽象事物。

  抽象类,是不断的向上抽取而来。抽取方法声明而不确定具体的方法内容。由不同的子类来完成具体的方法内容。

  (一)抽象类的特点:

    1、抽象方法没有方法体,必须由抽象关键字abstract来修饰。

    1、抽象方法一定是存在于抽象类中,必须有抽象关键字abstract来修饰。

    2、抽象类不能实例化。不能用new关键字创建对象。

    3、子类必须覆盖抽象类中的所有抽象方法后,才可以实例化。否则该子类还是一个抽象类。

  (二)抽象类中可以有构造函数:

    因为抽象类不能创建对象,所有抽象类中的构造函数是不能给抽象类的对象进行实例化。但是抽象类可以有子类,抽象类的构造函数可以子类的对象进行初始化。所有抽象类中可以有构造函数。

  (三)抽象类和一般类的区别:

    抽象类可以描述事物的属性和行为。描述事物的信息不具体,可以定义抽象方法,但不能进行实例化。

    一般类可以描述事物的属性和行为。事物的信息是具体的,不可以定义抽象方法,但可以进行实例化。

  (四)抽象类一定是个父类:

    因为必须需要子类覆盖抽象方法后,才可以实例化。才能使用这些方法。

  (五)抽象类中是可以不定义抽象方法的:

    这时的抽象类的功能,仅仅是让该类不能创建对象。

  (六)抽象关键字abstract和那些关键字不能共存的:

      关键字final、关键字private、关键字static。

二、实例代码

  要求:公司中有程序员和项目经理。程序员有姓名、工号和薪水。并为公司进行工作。项目经理除了有姓名、工号和薪水外还有奖金。也为公司进行工作。对给出的需求进行数据建模。

  分析:

  程序员:属性:姓名、工号、薪水

      行为:工作

  项目经理:属性:姓名、工号、薪水、奖金
       行为:工作

  两者不存在所属关系,但是有共性内容,可以向上抽取为雇员。

  雇员:属性:姓名、工号、薪水

     行为:工作

 //抽象类 Employee
abstract class Employee
{
private String name;
private int id;
private double pay; public void setName(String name)
{
this.name = name;
}
public void setId(int id)
{
this.id = id;
}
public void setPay(double pay)
{
this.pay = pay;
} public String getName()
{
return name;
}
public int getId()
{
return id;
}
public double getPay()
{
return pay;
} Employee(String name,int id,double pay)
{
this.name = name;
this.id = id;
this.pay = pay;
} //抽象方法 work
public abstract void work();
} //描述程序员继承抽象类 Employee
class Programmer extends Employee
{
Programmer(String name,int id,double pay)
{
super(name,id,pay);
}
public void work()
{
System.out.println("name: "+this.getName()+" id: " +this.getId()+" pay: "+this.getPay() );
System.out.println("Programmer work ......");
} } //描述项目经理继承抽象类 Employee
class Manager extends Employee {
private double bonus; Manager(String name,int id,double pay,double bonus)
{
super(name,id,pay);
this.bonus = bonus;
}
public void work()
{
System.out.println("name: "+this.getName()+" id: " +this.getId()+" pay: "+this.getPay()+" bonus: " +bonus);
System.out.println("Manager work ......");
}
} class AbstractDemo
{
public static void main(String[] args)
{
Programmer a = new Programmer("xiaoming",001,5000.00);
a.work();
Manager m = new Manager("xiaohong",010,8000.00,600.00);
m.work();
}
}

三、代码执行

  

Java面向对象之抽象类abstract 入门实例的更多相关文章

  1. Java面向对象之接口interface 入门实例

    一.基础概念 (一)接口可以简单的理解为,是一个特殊的抽象类,该抽象类中的方法都是抽象的. 接口中的成员有两种:1.全局常量 2.抽象方法 定义接口用关键字interface,接口中的成员都用固定的修 ...

  2. Java面向对象之继承extends 入门实例

    一.基础概念 (一)继承的好处: 1.继承:提高了代码的复用性. 2.让类与类之间产生了关系,给多态这个特征提供了前提. (二)继承的种类: 1.单继承:一个类只能有一个父类. 2.多继承:一个类可以 ...

  3. Java面向对象之关键字final 入门实例

    一.基础概念 1.关键字final可以修饰类.函数.变量. 2.关键字final修饰的类不可以被继承. 3.关键字final修饰的方法不可以被覆盖. 4.关键字final修饰的变量是一个常量,只能被赋 ...

  4. Java面向对象之关键字super 入门实例

    一.基础概念 (一)super关键字 super关键字的用法和this相似.this代表的是当前对象.super代表的是父类中内存空间. 子父类中是不会出现同名属性的情况. (二)继承中.成员变量问题 ...

  5. Java面向对象之关键字static 入门实例

    一.基础概念 静态关键字 static 是成员修饰符,直接用于修饰成员. (一)特点: 1.被静态修饰的成果,可以直接被类名所调用. 2.静态成员优先于对象存在. 3.静态成员随着类的加载而加载.随着 ...

  6. Java面向对象之关键字this 入门实例

    一.基础概念 1.关键字this是指:哪个对象调用this所在的函数.this就指向当前这个对象. 2.用法: (1).this关键字可以解决:构造函数私有化问题. 注意:构造函数只能被构造函数调用, ...

  7. 浅谈Java面向对象之抽象类(abstract)

    java语言,声明类时格式为: abstract class Db{} 说明Db类为抽象类.抽象方法是说没有方法的实现(方法体)此方法为抽象方法,只有抽象类和接口中才可以有抽象方法.简而言之,含有抽象 ...

  8. Java面向对象之抽象类

    内容: 1.抽象类的产生 2.抽象类和抽象方法的定义与使用 3.抽象类和抽象方法的注意事项 4.实例分析 1.抽象类的产生 当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的功能具 ...

  9. Java面向对象_抽象类、接口

    一.抽象类 概   念:很多具有相同特征和行为的对象可以抽象为一个类:很多具有相同特征和行为的类可以抽象为一个抽象类 关键字:abstract 规   则:1.抽象类可以没有抽象方法,有抽象方法的类必 ...

随机推荐

  1. krpano之热点样式及文本

    修改热点的样式只需要将热点引用的style样式替换即可. 动态样式代码: <style name="skin_hotspotstyle" url="zlqj_hot ...

  2. 英语单词state和status的区别

    state:比较常用,各种状态都可以用它,但是它更着重于一种心理状态或者物理状态. Status:用在人的身上一般是其身份和地位,作"状态,情形"讲时,多指政治和商业. state ...

  3. Uboot详细解析2

    1.第二阶段的主线函数位于u-boot-2010.06/arch/arm/lib/board.c. 第二阶段的功能: <1> 初始化本阶段要使用到的硬件设备. 设置时钟.初始化串口. bo ...

  4. Android 创建项目出现No resource found that matches the given name Theme.AppCompat.Light

    关于为何出现No resource found that matches the given name ‘Theme.AppCompat.Light’的原因 这边博客已经写的很清楚了 大家可以参考一下 ...

  5. 百度Ueditor编辑器取消多图上传对话框中的图片搜索

    百度Ueditor确实是一个非常强悍的编辑器,功能强大!但是实际开发需求复杂,总会有各种不符合要求的,比如想要取消多图上传的“图片搜索”选项卡(这个图片搜索真心难用)! 以ueditor 1.4.3为 ...

  6. Lambda02 函数式接口

    1 java8默认提供的函数式接口 1.1 Predicate /* * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rig ...

  7. Java 基于quartz实现定时 之一(注解方式配置)

    需要在项目里,导入quartz.jar package cn.zr.pringmvctest.trigger; import org.springframework.context.annotatio ...

  8. Marvel

    Marvel and what it is From http://www.tuicool.com/articles/qA3yau With marvel you can get an overvie ...

  9. while 和do while循环的区别

    int a; scanf_s("%d",&a); while(a>0) { //do something; } while循环先要判断条件是否成立,如果不成立,那么就 ...

  10. c语言实践 创建两个包含8个元素的double类型数组,第二个元素的每个元素的值都是对应前一个元素的前n个元素的和

    意思就是第二个元素的num[2]等于第一个元素的num[0]+num[1]+num[2] #define COUNT 8 int main(void) { double num1[COUNT]; do ...