Java面向对象之抽象类abstract 入门实例
一、基础概念
抽象事物,是若没有具体的信息可以描述这个事物,这个事物可以称为抽象事物。
抽象类,是不断的向上抽取而来。抽取方法声明而不确定具体的方法内容。由不同的子类来完成具体的方法内容。
(一)抽象类的特点:
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 入门实例的更多相关文章
- Java面向对象之接口interface 入门实例
一.基础概念 (一)接口可以简单的理解为,是一个特殊的抽象类,该抽象类中的方法都是抽象的. 接口中的成员有两种:1.全局常量 2.抽象方法 定义接口用关键字interface,接口中的成员都用固定的修 ...
- Java面向对象之继承extends 入门实例
一.基础概念 (一)继承的好处: 1.继承:提高了代码的复用性. 2.让类与类之间产生了关系,给多态这个特征提供了前提. (二)继承的种类: 1.单继承:一个类只能有一个父类. 2.多继承:一个类可以 ...
- Java面向对象之关键字final 入门实例
一.基础概念 1.关键字final可以修饰类.函数.变量. 2.关键字final修饰的类不可以被继承. 3.关键字final修饰的方法不可以被覆盖. 4.关键字final修饰的变量是一个常量,只能被赋 ...
- Java面向对象之关键字super 入门实例
一.基础概念 (一)super关键字 super关键字的用法和this相似.this代表的是当前对象.super代表的是父类中内存空间. 子父类中是不会出现同名属性的情况. (二)继承中.成员变量问题 ...
- Java面向对象之关键字static 入门实例
一.基础概念 静态关键字 static 是成员修饰符,直接用于修饰成员. (一)特点: 1.被静态修饰的成果,可以直接被类名所调用. 2.静态成员优先于对象存在. 3.静态成员随着类的加载而加载.随着 ...
- Java面向对象之关键字this 入门实例
一.基础概念 1.关键字this是指:哪个对象调用this所在的函数.this就指向当前这个对象. 2.用法: (1).this关键字可以解决:构造函数私有化问题. 注意:构造函数只能被构造函数调用, ...
- 浅谈Java面向对象之抽象类(abstract)
java语言,声明类时格式为: abstract class Db{} 说明Db类为抽象类.抽象方法是说没有方法的实现(方法体)此方法为抽象方法,只有抽象类和接口中才可以有抽象方法.简而言之,含有抽象 ...
- Java面向对象之抽象类
内容: 1.抽象类的产生 2.抽象类和抽象方法的定义与使用 3.抽象类和抽象方法的注意事项 4.实例分析 1.抽象类的产生 当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的功能具 ...
- Java面向对象_抽象类、接口
一.抽象类 概 念:很多具有相同特征和行为的对象可以抽象为一个类:很多具有相同特征和行为的类可以抽象为一个抽象类 关键字:abstract 规 则:1.抽象类可以没有抽象方法,有抽象方法的类必 ...
随机推荐
- Oracle11gr2_ADG管理之跳归档恢复dg实战
模拟故障 关闭备库 SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut dow ...
- ActiveX每次网页打开提示活动内容运行
(2) 设置允许活动内容运行. 在启动调试,网页经常会呈现如下提示框,每次都要确认,很麻烦. 以下方法可以消除这个提示框. 在IE中打开Internet 选项对话框,选择高级选项卡,勾选里 ...
- Asp.Net framework 类库 自带的缓存 HttpRuntime.Cache HttpContext.Cache
两个Cache 在.NET运用中经常用到缓存(Cache)对象.有HttpContext.Current.Cache以及HttpRuntime.Cache,HttpRuntime.Cache是应用程序 ...
- webapi的几种过滤器
好久没有写博客了 今天就来聊聊asp.net webapi的过滤器们 过滤器主要有这么几种 AuthorizationFilterAttribute 权限验证 ActionFilterAttribut ...
- Docker镜像加速 | Docker 中国源 | 仓库
镜像加速 | Docker 中国https://www.docker-cn.com/registry-mirror
- Docker02 基本命令、开发环境搭建、docker安装nginx、Dockerfile、路径挂载
1 基本命令 1.1 docker相关 centos6.5 安装docker环境 >sudo yum install -y http://mirrors.yun-idc.com/epel/6/i ...
- Hyperledger Fabric开发
打开Hyperledger Fabric在线开发文档:https://hyperledger-fabric.readthedocs.io 建议在Mac或Linux环境下操作,因为文档基本上是按照Mac ...
- npm link和react native的问题
问题说明: 需要自己开发一个ReactNative插件,这个插件在独立git仓库,那么怎么把这个插件安装到主项目的依赖里,并且方便对插件的修改调试 方案一: 把插件发布到npm仓库,每次主项目通过np ...
- win10手动开启wifi
win+R键,输入cmd,以管理员身份运行,输入netsh wlan set hostednetwork mode=allow ssid=wifi key=wifimima123回车 解释一下: ss ...
- Entity Framework 6.0 Tutorials(8):Custom Code-First Conventions
Custom Code-First Conventions: Code-First has a set of default behaviors for the models that are ref ...