抽象类

特点:
1. 方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰,抽象方法必须定义在抽象类中。该类必须也被abstract修饰
2. 抽象类不可以被实例化. 为什么?  因为调用抽象方法没意义。
3. 抽象类必须有其子类覆盖了所有的抽象方法后,该子类才可以实例化,否则,这个子类还是抽象类。

abstract class 犬科
{
abstract/*抽象*/ void show();
}//抽象方法所在的类也必须的抽象的. class 狗 extends 犬科
{
void 吼叫()
{
System.out.println("汪汪");
}
} class 狼 extends 犬科
{
void 吼叫()
{
System.out.println("嗷嗷");
}
} class AbstractDemo
{
public static void main(String[] args)
{ }
}

细节理解:

1. 抽象类中有构造函数吗?
有,用于给子类对象进行初始化.

2. 抽象类可以不定义抽象方法吗?
可以,但是很少见,目的就是不让该类创建对象. AWT的适配器对象就是这种类.
通常这个类中的方法有方法体,但是却没有内容.

abstract class Demo
{
void show1()
{} void show2()
{}
}

3. 抽象关键字不可以和哪些关键字共存?
private  因为抽象方法要被覆盖
static  有它就不需要创建对象
final 不能被继承

4. 抽象类和一般类的区别
相同点:
抽象类和一般类都是用来描述事物的,都在内部定了成员。
不同点:
  1. 一般类有足够的信息描述事物,抽象类描述事物的信息有可能不足。
  2. 一般类中不能定义抽象方法,抽象类中可以定义抽象方法。
  3. 一般类可以被实例化,抽象类不可以被实例化。

5. 抽象类一定是个父类吗?
是的,因为需要子类覆盖其方法后才可以对子类实例化。

雇员示例:
需求: 公司中程序员有姓名,工号,薪水,工作内容。
项目经理除了有姓名,工号,薪水,还有奖金,工作内容。
对给除需求进行数据建模。

分析:
在这个问题领域中,先找出涉及的对象。
通过名词提炼法。
程序员:
属性: 姓名,工号,薪水
行为: 工作
经理:
属性: 姓名,工号,薪水,奖金
行为: 工作

程序员和经理不存在着直接继承关系,
但是程序员和经理却具有共性内容。
可以进行抽取. 因为他们都是公司的雇员。

可以将程序员和经理进行抽取,建立体系。

描述雇员

abstract class Employee
{
private String name;
private String id;
private double pay;
Employee(String name,String id,double pay)
{
this.name = name;
this.id = id;
this.pay = pay;
} public abstract void work();
}

描述程序员

class Programmer extends Employee
{
Programmer(String name,String id,double pay)
{
super(name,id,pay);
}
public void work()
{
System.out.println("code....");
}
}

描述经理

class Manager extends Employee
{
private int bonus;
Manager(String name,String id,double pay,int bonus)
{
super(name,id,pay);
this.bonus = bonus;
}
public void work()
{
System.out.println("manage");
}
}

Java学习个人备忘录之抽象类的更多相关文章

  1. 《JAVA学习笔记(14-10---14-11抽象类)》

    [14-10]面向对象-抽象类的产生 /* 描述狗,行为,吼叫. 描述狼,行为,吼叫. 发现他们之间有共性,可以进行向上抽取. 当然是抽取他们的所属共性类型,犬科. 犬科这类事物,都具备吼叫行为,但是 ...

  2. Java学习个人备忘录之接口

    abstract class AbsDemo { abstract void show1(); abstract void show2(); } 当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类 ...

  3. Java学习笔记(八)面向对象---抽象类

    当多个类中出现相同功能,但是功能主体不同时,我们可以向上抽取,只抽取功能定义,而不抽取功能主体. 抽象类的特点 抽象方法一定在抽象类中. 抽象方法和抽象类都必须被abstract关键字修饰. 抽象类不 ...

  4. Java学习个人备忘录之线程间的通信

    线程间通讯多个线程在处理同一资源,但是任务却不同. class Resource { String name; String sex; } //输入 class Input implements Ru ...

  5. Java学习个人备忘录之多线程

    进程:正在进行中的程序(直译). 线程:就是进程中一个负责程序执行的控制单元(执行路径) 一个进程中可以有多个执行路径,称之为多线程. 一个进程中至少要有一个线程. 开启多个线程是为了同时运行多部分代 ...

  6. Java学习个人备忘录之异常

    概述 异常:是在运行时期发生的不正常情况. 在java中用类的形式对不正常情况进行了描述和封装对象. 描述不正常的情况的类,就称为异常类. 以前正常流程代码和问题处理代码相结合,现在将正常流程代码和问 ...

  7. Java学习个人备忘录之继承

    继承的好处1. 提高了代码的复用性.2. 让类与类之间产生了关系,给第三个特征多态提供了前提. java中支持单继承,不直接支持多继承,但对C++中的多继承机制进行改良.java支持多层继承. C继承 ...

  8. Java学习个人备忘录之文档注释

    文档注释 单行注释用 // 多行注释有两种,第一种是 /* 内容 */,第二种是/** 内容 */. 这两种多行注释的区别是/** 内容 */这种注释可以生成一个该文件的注释文档,下面是演示代码. A ...

  9. Java学习个人备忘录之数组工具类

    下面主要讲解一个针对数组操作的工具类. a.java -- 工具类文件 //按理来说要先编译本文件, 然后再编译主函数 class ArrayTool { /* 获取整型数组的最大值 */ publi ...

随机推荐

  1. Linux性能检查命令总结[转]

    一些常用的网络.IO.内存监控指令,Linux性能检查命令总结

  2. jQuery语法、选择器、效果等使用

    1.jQuery语法 1.1 基础语法:$(selector).action( ) 美元符号定义 jQuery 选择符(selector)“查询”和“查找” HTML 元素 jQuery 的 acti ...

  3. 颜色rgba、16进制、10进制互相装换

    rgba转16进制: function RGBToHex(rgb){ var regexp = /[0-9]{0,3}/g; var re = rgb.match(regexp);//利用正则表达式去 ...

  4. 原型 - 实现自己的jQuery

    每个第一次使用jq的开发者都感到惊叹,jq的$太神奇了,究竟是怎么做到的使用$控制dom 赞叹前人之余,探究其本源才是前端开发者应该做的事,社区常常说,不要重复造轮子, 可是啊,连轮子都造不出来,又怎 ...

  5. laravel5.5源码阅读草稿——入口

    laravel的启动需要通过路由.中间件.控制器.模型.视图最后出现在浏览器.而路由.中间件.模型,这些功能都有自己的类,比如Route::any().DB::table().$this->mi ...

  6. 微信支付tp5.1集合

    多商户号微信支付 配置 自己改一改 逻辑 就好了! 写的菜 勿喷 extend下面 主要目录 多商户号 配置项 根据自己的需求更改 可能有一些地方存在BUG 自己调试一下 就OK了,别像一个麻瓜一样 ...

  7. 大数据学习之Hadoop环境搭建

    一.Hadoop的优势 1)高可靠性:因为Hadoop假设计算元素和存储会出现故障,因为它维护多个工作数据副本,在出现故障时可以对失败的节点重新分布处理. 2)高扩展性:在集群间分配任务数据,可方便的 ...

  8. Jupyter Notebook的魔法

    在腾讯云上搭建了一个Jupyter Notebook 还是很好用的, 这里总结了一些看到的小技巧及快捷键使得我们更加快捷的完成工作. Notebook 与 Vim 有些类似,有两种键盘输入模式,即命令 ...

  9. JAVA基础 - 自定义异常类

    自定义异常类,代码还不是很明白,先存着以后参考. package week6; class ScoreException extends Exception { private static fina ...

  10. 不使用IDE,用maven命令打包war项目及出现的问题解决(最全攻略,亲测有效)

    第一次在博客园写博客,写的不好大家见谅啊!! 一.首先,在用maven打包之前,一定确认好你使用的jdk版本和maven的版本,最好就是用jdk1.8和maven3.3以上的,版本太低了容易出现一些意 ...