###11抽象类的产生
A:抽象类的产生
a:分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是方法功能声明相同,但方法功能主体不同。那么这时也可以抽取,但只抽取方法声明,不抽取方法主体。那么此方法就是一个抽象方法。
###12抽象类的定义格式
A:抽象方法定义的格式:
a:public abstract 返回值类型 方法名(参数);
抽象类定义的格式:
abstract class 类名 {

}
b:抽象类示例代码:
/*
* 定义类开发工程师类
* EE开发工程师 : 工作
* Android开发工程师 : 工作
*
* 根据共性进行抽取,然后形成一个父类Develop
* 定义方法,工作: 怎么工作,具体干什么呀
*
* 抽象类,不能实例化对象, 不能new的
* 不能创建对象的原因: 如果真的让你new了, 对象.调用抽象方法,抽象方法没有主体,根本就不能运行
* 抽象类使用: 定义类继承抽象类,将抽象方法进行重写,创建子类的对象
*/
public abstract class Develop {
//定义方法工作方法,但是怎么工作,说不清楚了,讲不明白
//就不说, 方法没有主体的方法,必须使用关键字abstract修饰
//抽象的方法,必须存在于抽象的类中,类也必须用abstract修饰
public abstract void work();
}

###13抽象类的使用方式
A:抽象类的使用方式
/*
* 定义类,JavaEE的开发人员
* 继承抽象类Develop,重写抽象的方法
*/
public class JavaEE extends Develop{
//重写父类的抽象方法
//去掉abstract修饰符,加上方法主体
public void work(){
System.out.println("JavaEE工程师在开发B/S 软件");

}
}
/*
* 定义Android类,继承开发人员类
* 重写抽象方法
*/
public class Android extends Develop{
public void work(){
System.out.println("Android工程师开发手机软件");
}
}

/*
* 测试抽象类
* 创建他的子类的对象,使用子类的对象调用方法
*/
public class Test {
public static void main(String[] args) {
JavaEE ee = new JavaEE();
ee.work();//"JavaEE工程师在开发B/S 软件"

Android and = new Android();
and.work();//"Android工程师开发手机软件"
}
}

###14抽象类特点
A:抽象类的特点
a:抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中。
b:抽象类不可以直接创建对象,原因:调用抽象方法没有意义。
c:只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。
之所以继承抽象类,更多的是在思想,是面对共性类型操作会更简单。
abstract class A{
public abstract void func();
public abstract void func2();
}
class A2 extends A{//A2把A中的两个抽象方法都重写掉了
//A2类不再是抽象类
public void func(){}
public void func2(){}
}

abstract class A3 extends A{//含有抽象方法的类一定是抽象类
public void func(){

}
//public abstract void func2();//func2相当于被继承下来
}

###15抽象类的设计思想 4:40
A:抽象类的设计思想
a:抽象类的作用:继承的体系抽象类,强制子类重写抽象的方法
抽象员工:
规定一个方法,work工作
EE员工,Android员工

Develop类 抽象类
abstract work();
|
-------------
| |
EE Android //是我开发的一员必须工作
work(){} work(){}

###16抽象类的细节
A:抽象类的细节
a:抽象类一定是个父类?
是的,因为不断抽取而来的。
b:抽象类中是否可以不定义抽象方法?
是可以的,那这个抽象类的存在到底有什么意义呢?不让该类创建对象,方法可以直接让子类去使用
(适配器设计模式)
/*
* 抽象类,可以没有抽象方法,可以定义带有方法体的方法
* 让子类继承后,可以直接使用
*/
public abstract class Animal {
public void sleep(){
System.out.println("动物睡觉");
}

}
public class Cat extends Animal{

}

public class Test {
public static void main(String[] args) {
//Cat c = new Cat();
new Cat().sleep();//不让该类创建对象,方法可以直接让子类去使用
}
}
c:抽象关键字abstract不可以和哪些关键字共存?
 1:private:私有的方法子类是无法继承到的,也不存在覆盖,
而abstract和private一起使用修饰方法,abstract既要子类去实现这个方法,
而private修饰子类根本无法得到父类这个方法。互相矛盾。

/*
* 抽象类,可以没有抽象方法,可以定义带有方法体的方法
* 让子类继承后,可以直接使用
*/
public abstract class Animal {

// private abstract void show();
//抽象方法,需要子类重写, 如果父类方法是私有的,子类继承不了,也就没有了重写
}


2:final,暂时不关注,后面学
 3:static,暂时不关注,后面学

###17员工案例分析
A:员工案例分析:
a:需求描述:
某IT公司有多名员工,按照员工负责的工作不同,进行了部门的划分(研发部员工、维护部员工)。
研发部根据所需研发的内容不同,又分为JavaEE工程师、Android工程师;
维护部根据所需维护的内容不同,又分为网络维护工程师、硬件维护工程师。

公司的每名员工都有他们自己的员工编号、姓名,并要做它们所负责的工作。
 工作内容
 JavaEE工程师:员工号为xxx的 xxx员工,正在研发淘宝网站
 Android工程师:员工号为xxx的 xxx员工,正在研发淘宝手机客户端软件
 网络维护工程师:员工号为xxx的 xxx员工,正在检查网络是否畅通
 硬件维护工程师:员工号为xxx的 xxx员工,正在修复打印机
b:继承体系:
员工
|
--------------------------------------------
| |
研发部员工 维护部员工
| |
------------- -----------
| | | |
JavaEE工程师 Android工程师 网络维护工程师 硬件维护工程师

c:详细描述:
 根据员工信息的描述,确定每个员工都有员工编号、姓名、要进行工作。
则,把这些共同的属性与功能抽取到父类中(员工类),
关于工作的内容由具体的工程师来进行指定。
 工作内容
 JavaEE工程师:员工号为xxx的 xxx员工,正在研发淘宝网站
 Android工程师:员工号为xxx的 xxx员工,正在研发淘宝手机客户端软件
 网络维护工程师:员工号为xxx的 xxx员工,正在检查网络是否畅通
 硬件维护工程师:员工号为xxx的 xxx员工,正在修复打印机
 创建JavaEE工程师对象,完成工作方法的调用

###18员工案例Employee类的编写
A:员工案例Employee类的编写:按照分析的继承体系来逐个实现
/*
* 定义员工类
* 内容,都是所有子类的共性抽取
* 属性: 姓名,工号
* 方法: 工作
*/
public abstract class Employee {
private String id;// 员工编号
private String name; // 员工姓名

public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

//工作方法(抽象方法)
public abstract void work();
}

###19员工案例的子类的编写
B:员工案例的子类的编写:
/*
* 定义研发员工类
* 属于员工中的一种, 继承员工类
* 抽象类Develop 给自己的员工定义自己有的属性
*/
public abstract class Develop extends Employee{

}

/*
* 描述JavaEE开发工程师类
* 工号,姓名 工作方法
* 其他的员工,也具备这些共性,抽取到父类中,自己就不需要定义了
* 是研发部员工的一种,继承研发部类
*/
public class JavaEE extends Develop{
//重写他父类的父类的抽象方法
public void work(){
//调用父类的get方法,获取name,id值
System.out.println("JavaEE的工程师开发淘宝"+ super.getName()+".."+super.getId());
}
}
/*
*定义Android工程师 继承 研发部员工类,重写工作方法
*/
public class Android extends Developer {
@Override
public void work() {
System.out.println("员工号为 " + getId() + " 的 " + getName() + " 员工,正在研发淘宝手机客户端软件");
}
}

/*
* 定义维护员工类,属于员工中的一种
* 继承员工类
* 抽象类Maintainer 给自己的员工定义自己有的属性
*/
public abstract class Maintainer extends Employee{

}

/*
* 描述的是网络维护工程师
* 属于维护部的员工,继承维护部类
*/
public class Network extends Maintainer{
public void work(){
System.out.println("网络工程师在检查网络是否畅通"+super.getName()+"..."+super.getId());
}
}

/*
*定义Hardware硬件维护工程师 继承 维护部员工类,重写工作方法
*/
public class Hardware extends Maintainer {
@Override
public void work() {
System.out.println("员工号为 " + getId() + " 的 " + getName() + " 员工,正在修复打印机");
}
}

Java语言学习day20--7月26日的更多相关文章

  1. python学习 day20 (3月27日)----(单继承多继承c3算法)

    继承: 提高代码的重用性,减少了代码的冗余 这两个写法是一样的 Wa('青蛙').walk() #青蛙 can walk wa = Wa('青蛙') wa.walk() #青蛙 can walk 1. ...

  2. python学习 day19 (3月26日)----(对象组合)

    深谙:非常透彻地了解:熟悉内中情形.谙,读作‘ān’ 熟悉. 1.面向对象作用:规划了代码中的函数处理的是哪一类问题 解决了传参的问题 方便扩展 方便重用 2.类的定义和使用类当中有哪些成员 ''' ...

  3. Java语言学习day01--6月28日

    Java语言学习day01一:Java概述 1.Java语言发展史 任职于太阳微系统的 詹姆斯·高斯林 等人于1990年代初开发Java语言的雏形,最初被命名为 Oak ,目标设置在 家用电器等小型系 ...

  4. Java语言学习day02--6月29日

    Java语言学习day02###01常用的DOS命令 * A: 常用的DOS命令 * a: 打开Dos控制台 * win+r--cmd--回车 * b: 常用dos命令 * cd.. : 退回到上一级 ...

  5. GIS大讲堂内所有讲座的索引(更新至2008年6月26日)(转)

    转自:http://www.cnblogs.com/xiexiaokui/archive/2008/11/20/1337934.html GIS大讲堂内所有讲座的索引(更新至2008年6月26日)   ...

  6. 10月26日 奥威Power-BI基于微软示例库(MSOLAP)快速制作管理驾驶舱 腾讯课堂开课啦

    本次课是基于olap数据源的案例实操课,以微软olap示例库Adventure Works为数据基础.        AdventureWorks示例数据库为一家虚拟公司的数据,公司背景为大型跨国生产 ...

  7. 2013年12月26日 星期四 doxygen入门--很好

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  8. 我的Python成长之路---第一天---Python基础(1)---2015年12月26日(雾霾)

    2015年12月26日是个特别的日子,我的Python成之路迈出第一步.见到了心目中的Python大神(Alex),也认识到了新的志向相投的伙伴,非常开心. 尽管之前看过一些Python的视频.书,算 ...

  9. 2016年12月26日 星期一 --出埃及记 Exodus 21:21

    2016年12月26日 星期一 --出埃及记 Exodus 21:21 but he is not to be punished if the slave gets up after a day or ...

  10. 2016年11月26日 星期六 --出埃及记 Exodus 20:17

    2016年11月26日 星期六 --出埃及记 Exodus 20:17 "You shall not covet your neighbor's house. You shall not c ...

随机推荐

  1. MariaDB开启日志审计功能

    对于MySQL.Percona.MariaDB三家都有自己的审计插件,但是MySQL的审计插件是只有企业版才有的,同时也有很多第三方的的MySQL的审计插件,而Percona和MariaDB都是GPL ...

  2. 解决使用DBeaver连接MySQL时报错-The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone.

    解决使用DBeaver连接MySQL时报错,其实提示很明显. The server time zone value '�й���׼ʱ��' is unrecognized or represents ...

  3. Spring Boot 传参 序列化和反序列化

    序列化 反序列化

  4. springboot 设定访问项目的根路径

    springboot的配置文件application.yml: spring.mvc.view.prefix : / spring.mvc.view.suffix : .html server: po ...

  5. 什么是Spring IOC 容器?

    Spring IOC 负责创建对象,管理对象(通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期.

  6. 怎样在方法里面得到Request,或者Session?

    直接在方法的形参中声明request,SpringMvc就自动把request对象传入.

  7. 什么是memecache?redis 和 memecache 有什么区别?

    什么是memecache? memcached是一套分布式的高速缓存系统,与redis相似.一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度.提高可扩展性.为了 ...

  8. java-Map集合hei

    /* Map集合的特点: Map集合市一个双列集合,一个元素包含两个值:一个key,一个value Map集合中的元素,key和value的数据类型可以相同,也可以不同 Map集合中的元素,key不允 ...

  9. vue2与vue3的区别

    template <template> <div class="wrap"> <div>{{ num }}</div> <Bu ...

  10. BMZCTF phar???

    pchar??? 补充知识点 开始这题之前我们先补充一个知识点 phar 的文件包含 和上面类似先创建一个phar 标准包,使用 PharData 来创建,然后添加文件进去phar里面. 然后在文件包 ...