文章目录

  • 抽象类的概念
  • 举例1:绘制图形项目修改
  • 举例2:员工类

抽象类的概念

抽象类的基本概念
1、很多具有相同特征和行为的对象可以抽象为一个类;很多具有相同特征和行为的类可以抽象为一个抽象类。
2、使用abstract关键字声明的类为抽象类

抽象类作用
1、为子类提供通用代码
2、为子类提供通用方法的定义
子类向上转型之后可以调用父类的这个通用方法(当然执行的时候是执行子类的方法),如果不定义这个抽象方法(所谓的抽象方法理解起来非常简单,就是没有完成的方法),只能向下转型成子类再调用子类中方法

抽象类的规则
a、抽象类可以没有抽象方法,有抽象方法的类必须是抽象类
b、非抽象类继承抽象类必须实现所有抽象方法
c、抽象类可以继承抽象类,可以不实现父类抽象方法。
d、抽象类可以有方法实现和属性
e、抽象类不能被实例化
f、抽象类不能声明为final
g、抽象类可以有构造方法

举例1:绘制图形项目修改

这个例子是根据上一章的绘制图形项目进行的修改,传送门:【达内课程】面向对象之多态

前情回顾:

我们有图形类 Shape(图形),它的子类有 Line(线)、Circle(圆)、Square(方)

Shape:draw(画图)、clean(清除)
|-Line:有自己的 draw 方法。有单独的 length 方法
|-Circle:有自己的 draw 方法 |-Square:有自己的 draw 方法

Shape类修改

public abstract class Shape {public abstract void draw(TextView view);public void clean(TextView view) {view.setText("");}
}

其中继承 Shape 类 Circle、Line、Square 都不能使用 super.draw(view);了,所以应该在代码中去掉,例如 Circle 类:

public class Circle extends Shape {@Overridepublic void draw(TextView view) {//super.draw(view);view.setText("o");}
}

修改 MainActivity 中的 doClick 方法,其余点击事件都没有变,只不过由于抽象类不能创建实例,所以修改了 button1 的点击事件

public void doClick(View view) {switch (view.getId()) {case R.id.button1://f(new Shape());textView.setText("抽象类不能创建实例");break;case R.id.button2:f(new Line());break;......}}

运行结果:

这里重点看下 f(Shape shape) 方法,重点都写在注释里了:

private void f(Shape shape) {//参数对象,保存到成员变量currentShape = shape;//调用抽象方法//执行的是子类实现的draw方法shape.draw(textView);//向上转型后只能访问父类定义的通用成员//不能访问子类特有成员//shape.length();if (shape instanceof Line) {Line line = (Line) shape;line.length(textView);}}

举例2:员工类

我们有一个抽象的员工类 Employee,抽象方法有 工资(gongzi())、奖金(jiangjin())。还有一个返回综合工资的方法(zonghe()

程序员类 Programmer、经理类 Manager 继承了这个抽象方法

Employee
|-Programmer
|-Manager

Employee

public abstract class Employee {public abstract double gongzi();public abstract double jiangjin();public double zonghe() {//抽象方法调用//执行具体子类中实现的方法return gongzi() + jiangjin();}
}

Programmer

public class Programmer extends Employee {@Overridepublic double gongzi() {return 8000;}@Overridepublic double jiangjin() {return 1000;}
}

Manager

public class Manager extends Employee {@Overridepublic double gongzi() {return 10000;}@Overridepublic double jiangjin() {return 3000;}
}

xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/button1"android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="doClick"android:text="Employee" /><Buttonandroid:id="@+id/button2"android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="doClick"android:text="Programmer" /><Buttonandroid:id="@+id/button3"android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="doClick"android:text="Manager" /><TextViewandroid:id="@+id/text"android:layout_width="match_parent"android:layout_height="wrap_content"android:textColor="#222222"android:textSize="20sp"android:gravity="center" />
</LinearLayout>

MainActivity

package com.example.testapplication;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {Button button1;Button button2;Button button3;TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = (TextView) findViewById(R.id.text);button1 = (Button) findViewById(R.id.button1);button2 = (Button) findViewById(R.id.button2);button3 = (Button) findViewById(R.id.button3);}public void doClick(View view) {switch (view.getId()) {case R.id.button1:textView.setText("抽象类不能创建实例");break;case R.id.button2:f(new Programmer());break;case R.id.button3:f(new Manager());break;}}private void f(Employee employee) {textView.setText("");textView.append(employee.gongzi() + "\n");textView.append(employee.jiangjin() + "\n");textView.append(employee.zonghe() + "\n");}
}

运行程序:

【达内课程】面向对象之抽象类相关推荐

  1. 【达内课程】面向对象之多态

    文章目录 定义和作用 如何实现多态 例子1:Human 类 instanceof 关键字 例子2:Point3D 类 例子3:绘制图形 类型转换 定义和作用 多态的定义 面向对象的多态性,即" ...

  2. php面向对象代码_PHP面向对象之抽象类详解(代码实例)

    [摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...

  3. Java自学笔记——Java面向对象——04.抽象类、接口、内部类

    Java 面向对象各节 Java自学笔记--Java面向对象--01.回顾方法 Java自学笔记--Java面向对象--02.构造器.类和对象 Java自学笔记--Java面向对象--03.封装.继承 ...

  4. Java面向对象编程——抽象类和接口

    Java面向对象编程--抽象类和接口 定义类的过程就是抽象和封装的过程,而抽象类与接口则是对实体类进行更高层次的抽象,进定义公共行为和特征. 抽象类: 如果一个类没有足够的信息去描述一个具体的对象,那 ...

  5. 设计一个学生类Student,包括数据成员:姓名、学号、二门课程(面向对象程序设计、高等数学)的成绩。

    (1).设计一个学生类Student,包括数据成员:姓名.学号.二门课程(面向对象程序设计.高等数学)的成绩. (2).创建一个管理学生的类Management,包括实现学生的数据的增加.删除.修改. ...

  6. Java面向对象之抽象类与接口

    Java面向对象之抽象类与接口 ⚡️前言⚡️ 本篇文章为面向对象部分的第三篇文章,前两篇文章见链接包和继承.组合与多态.抽象类和接口都是继承关系中父类的更进一步,结合前两篇文章来阅读更易理解掌握.

  7. 【达内课程】面向对象之封装

    文章目录 封装的概念 封装的步骤 封装的概念 封装的概念 封装性是面向对象思想的三大特征之一,封装就是隐藏实现细节,仅对外提供访问接口.实现细节部份包装.隐藏起来的方法. 封装的好处 模块化.信息隐藏 ...

  8. 【达内课程】面向对象简介

    文章目录 概念了解 举例说明:创建一个Soldier类 举例说明:创建一个FlashLight类 举例说明:创建一个Car类 类中包含的变量 类中的方法 概念了解 Java是一种面向对象的程序设计语言 ...

  9. java 抽象类对象_Java基础___面向对象__抽象类

    抽象类 在面向对象的概念中,所以的对象都是通过类来描绘的,但是反过来,并不是多余类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不能实例化对象 ...

最新文章

  1. 你是别人眼中的废物产品经理吗?
  2. ajax返回的是流如何转换为pdf,如何在AJAX请求成功响应中返回PDF文件
  3. 编写手机端自适应页面案例,springMVC代码,SpringMVC上传代码,去掉input框中原有的样式,使ios按钮没有圆角,css中的border-radius类似
  4. Spring-boot配置JedisShardInfo
  5. 问题 E: Search Problem (II)
  6. 基础入门_Python-模块和包.深入SQLAlchemy之事务回滚与反射还原对象?
  7. phpmyadmin安装配置以及相关问题
  8. 关于Location of the Android SDK has not been setup in the preferences的解决方法
  9. oracle 基本dos命令,Oracle 常用 Dos命令
  10. Topcoder SRM 656 (Div.1) 250 RandomPancakeStack - 概率+记忆化搜索
  11. 解决:The proxy server received an invalid response from an upstream server
  12. 专访唐宇迪博士:我是如何迈入同济大学校园的?浅谈人工智能,未来数据挖掘和计算机视觉是风口
  13. mysql to excel 插件_在Excel中操作MySQL数据库插件MySQL for Excel
  14. 基于JAVA的GUI编程的的迷宫游戏 2020-12-15
  15. 3ds Max 实验十 熟悉材质编辑器
  16. 技巧分享篇---如何从GitHub上下载某个项目中单个文件的方法
  17. 新功能!微信可以开“小号”了
  18. transforms及Compose
  19. MATLAB——textscan
  20. 物理五大信道浅聊PRACH、PUCCH、PUSCH、PDCCH、PDSCH

热门文章

  1. 华清远见重庆中心—JAVA基础阶段技术总结/个人总结
  2. FTP VS镭速传输,小文件传输技术内有乾坤
  3. 制作美观的学术型 Beamer 幻灯片
  4. python3.9.1 百度云
  5. 地图POI类别标签体系建设实践
  6. 大数据(5r)ClickHouse客户端
  7. 交易所行情数据采集爬虫
  8. 用R中ggplot2包做箱线图、折线图、条形图
  9. html中如何文字换行,如何使用HTML / CSS将文字换行
  10. 老翁多年笔耕不断的奖赏