Java面向对象之抽象类

摘要:
内容:1.抽象类的生成。2.抽象类和方法的定义和使用。3.抽象类和方法的注意事项。4.实例分析。1.抽象类的生成。在编写类时,我们通常为类定义一些方法。这些方法用于描述类函数的具体实现。然后这些方法有特定的方法,但有时,父类只知道子类应该包含哪些方法,但不能确切地知道子类如何实现这些方法。例如,一个图形类应该有一个计算周长的方法,但是不同的图形有不同的算法来计算周长。我该怎么办

内容:

1、抽象类的产生

2、抽象类和抽象方法的定义与使用

3、抽象类和抽象方法的注意事项

4、实例分析

1、抽象类的产生

当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的功能具体实现方式,那么这些方法都有具体的方法体

但是有的时候,某个父类只是知道子类应该包含怎么样的方法,但是无法准确知道子类如何实现这些方法。

比如一个图形类应该有一个求周长的方法,但是不同的图形求周长的算法不一样。那该怎么办呢?

再比如:动物应该有吃饭的方法,猫,狗,猪.... 那么在他们的父类中 这个吃方法应该怎么定义?

分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是方法功能声明相同,但方法功能主体不同。

那么这时也可以抽取,但只抽取方法声明,不抽取方法主体。那么此方法就是一个抽象方法。如:

  • 描述讲师的行为:工作。
  • 描述助教的行为:工作。
  • 描述班主任的行为:工作。

讲师、助教、班主任之间有共性,可以进行向上抽取。抽取它们的所属共性类型:员工。

由于讲师、助教、班主任都具有工作功能,但是他们具体工作内容却不一样。这时在描述员工时,发现了有些

功能不能够具体描述,那么,这些不具体的功能,需要在类中标识出来,通过java中的关键字abstract(抽象)修饰,

这些功能就叫做抽象方法,当定义了抽象方法的类也必须被abstract关键字修饰,被abstract关键字修饰的类是抽象类

2、抽象类和抽象方法的定义和使用

抽象类:用abstract修饰的类是抽象类,抽象方法和抽象类没有必然联系

抽象方法:用abstract修饰的方法是抽象方法(只有声明没有实现即没有方法体)

抽象类和抽象方法的格式:

1 // 抽象方法定义的格式:
2 public abstract 返回值类型 方法名(参数);
3 // 抽象类定义的格式:
4 abstract class 类名 {
5 }

抽象类使用实例:

 1 abstract class Employee {
 2     public abstract void work();// 抽象函数。需要abstract修饰,并分号;结束
 3 }
 4 
 5 // 讲师
 6 class Teacher extends Employee {
 7     public void work() {
 8         System.out.println("正在讲解Java");
 9     }
10 }
11 
12 // 助教
13 class Assistant extends Employee {
14     public void work() {
15         System.out.println("正在辅导学生");
16     }
17 }
18 
19 // 班主任
20 class Manager extends Employee {
21     public void work() {
22         System.out.println("正在管理班级");
23     }
24 }
25 
26 // 抽象类的使用
27 public class AbstractDemo {
28     public static void main(String[] args) {
29         Employee e = new Teacher();
30         e.work();    // 正在讲解Java
31         e = new Assistant();
32         e.work();    // 正在辅导学生
33         e = new Manager();
34         e.work();    // 正在管理班级
35     }
36 }

3、抽象类和抽象方法的注意事项

(1)抽象类无法实例化

抽象类无法直接创建对象,只能被子类继承后,创建子类对象。

(2)抽象类的方法重写

子类需要继承抽象父类并完成最终的方法实现细节(即重写方法,完成方法体)。而此时,方法重写不再是

加强父类方法功能,而是父类没有具体实现,子类完成了具体实现,我们将这种方法重写也叫做实现方法

(3)抽象类的构造方法

抽象类是可以拥有构造方法的,其存在的意义在于对自身进行初始化,供其子类使用

(4)抽象类常见疑惑

  • 抽象类一定可以是个父类,因为抽象类是不断抽取共性需求而来的
  • 抽象类中是可以不定义抽象方法的,此时仅仅是不让该类创建对象,用于某些特殊的设计需要
  • 设计时由具体类抽取出抽象类,而开发阶段应该先定义抽象父类,再根据不同需求由父类定义子类

4、实例分析

问题描述:

某IT公司有多名员工,按照员工负责的工作不同,进行了部门的划分(研发部员工、维护部员工)

研发部根据所需研发的内容不同,又分为JavaEE工程师、Android工程师;

维护部根据所需维护的内容不同,又分为网络维护工程师、硬件维护工程师.

公司的每名员工都有他们自己的员工编号、姓名,并要做它们所负责的工作。

工作内容:

  • JavaEE工程师:员工号为xxx的 xxx员工,正在研发淘宝网站
  • Android工程师:员工号为xxx的 xxx员工,正在研发淘宝手机客户端软件
  • 网络维护工程师:员工号为xxx的 xxx员工,正在检查网络是否畅通
  • 硬件维护工程师:员工号为xxx的 xxx员工,正在修复打印机

请根据描述,完成员工体系中所有类的定义,并指定类之间的继承关系。进行XX工程师类的对象创建,完成工作方法的调用

分析如下:

Java面向对象之抽象类第1张

代码实现:

 1 // 抽象类
 2 public abstract class Employee {
 3     private String id;// 员工编号
 4     private String name; // 员工姓名
 5 
 6     public String getId() {
 7         returnid;
 8     }
 9     public void setId(String id) {
10         this.id = id;
11     }
12     public String getName() {
13         returnname;
14     }
15     public void setName(String name) {
16         this.name = name;
17     }
18     
19     // 工作方法(抽象方法)
20     public abstract void work(); 
21 }
22 
23 // 定义研发部员工类Developer 继承 员工类Employee
24 public abstract class Developer extends Employee {
25 }
26 
27 // 定义维护部员工类Maintainer 继承 员工类Employee
28 public abstract class Maintainer extends Employee {
29 }
30 
31 // 定义JavaEE工程师 继承 研发部员工类,重写工作方法
32 public class JavaEE extends Developer {
33     @Override
34     public void work() {
35         System.out.println("员工号为 " + getId() + " 的 " + getName() + " 员工,正在研发淘宝网站");
36     }
37 }
38 
39 // 定义Android工程师 继承 研发部员工类,重写工作方法
40 public class Android extends Developer {
41     @Override
42     public void work() {
43         System.out.println("员工号为 " + getId() + " 的 " + getName() + " 员工,正在研发淘宝手机客户端软件");
44     }
45 }
46 
47 // 定义Network网络维护工程师 继承 维护部员工类,重写工作方法
48 public class Network extends Maintainer {
49     @Override
50     public void work() {
51         System.out.println("员工号为 " + getId() + " 的 " + getName() + " 员工,正在检查网络是否畅通");
52     }
53 }
54 
55 // 定义Hardware硬件维护工程师 继承 维护部员工类,重写工作方法
56 public class Hardware extends Maintainer {
57     @Override
58     public void work() {
59         System.out.println("员工号为 " + getId() + " 的 " + getName() + " 员工,正在修复打印机");
60     }
61 }
62 
63 // 在测试类中,创建JavaEE工程师对象,完成工作方法的调用
64 public class Test {
65     public static void main(String[] args) {
66         // 创建JavaEE工程师员工对象
67         JavaEE ee = new JavaEE();
68         // 设置该员工的编号
69         ee.setId("000015");
70         // 设置该员工的姓名
71         ee.setName("小明");
72         // 调用该员工的工作方法
73         ee.work();
74     }
75 }

免责声明:文章转载自《Java面向对象之抽象类》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java深拷贝浅拷贝Windows mkdir下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[Java]重载,重写以及继承,多态的区别

转自:http://android.blog.51cto.com/268543/53181 什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承、多态、重载和重写。继承(inheritance)简单的说,继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(下面会讲到,这种方式叫重写)的方...

面向对象三大特性五大原则 + 低耦合高内聚

面向对象的三大特性是"封装、"多态"、"继承",五大原则是"单一职责原则"、"开放封闭原则"、"里氏替换原则"、"依赖倒置原则"、"接口分离原则"。 什么是面向对象 面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、...

java中abstract的用法

abstract(抽象)修饰符,可以修饰类和方法1,abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型,抽象类就像当于一类的半成品,需要子类继承并覆盖其中的抽象方法。2,abstract修饰方法,会使这个方法变成抽象方法,也就是只有声明(定义)而没有实现,实现部分以";"代替。需要子类...

C++ 系列:虚函数

Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明。 ---------------------------------------------------------------------------------...

C#的面向对象之继承与多态

1、继承的两个特性:传递性、单根性 2、多态 同一操作作用于不同类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。 3、调用父类的成员的关键字:base 4、父类中的成员如果采用private修饰符,它将作为私有成员,其他任何类都无法访问。 5、如果将父类中的成员设置为公有(public)成员,则任何类都可以访问该成员,这不符合我们的要求。 6、...

Java中常见设计模式面试

一、设计模式的分类   总体来说设计模式分为三大类:   创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。   结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。   行为型模式,共十一种: 策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式...