9.JAVA-抽象类定义
时间:2022-06-21
本文章向大家介绍9.JAVA-抽象类定义,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.抽象类
- 抽象类,用来表示一个抽象概念.
- 是一种只能定义类型,而不能产生对象的类,所以定义了抽象类则必须有子类的出现.
- 抽象类的好处在于能够明确地定义子类需要覆写的方法
- 抽象类需要使用abstract声明.
- 抽象类里可以实现抽象方法,该方法特征在于:只有声明,并没有方法体(所以子类必须全部覆写,并且子类不能为抽象类)
比如图形(Shape)类, 就是一个抽象的概念,因为我们无法计算这个“图形”的面积,所以它的成员函数area()是空的。
而继承它的子类(矩形,椭圆形,三角形等)就可以去覆写area()成员函数. 里面通过数学公式,计算出面积.
参考图形(Shape)类,代码如下:
abstract class Shape //抽象的图形类
{
abstract public double area(); //abstract修饰的方法为抽象方法,无需实现方法体.但是必须被子类覆写
}
class Ellipse extends Shape //椭圆类
{
private double wr; //椭圆的半径宽度
private double hr; //椭圆的半径高度
public Ellipse(double wr,double hr)
{
this.wr = wr;
this.hr = hr;
}
public double area(){
return 3.14159*wr*hr;
}
}
public class Test{
public static void main(String args[])
{
//Shape s = new Shape(); //如果定义抽象类,则将会报错
Ellipse e = new Ellipse(2.5,1);
System.out.println("Ellipse area = "+e.area());
}
}
需要注意的是:
- 抽象类可以存在构造方法,用来初始化抽象类的属性,
- 抽象类不能使用final定义,
2.抽象内部类定义
在java中,如果我们抽象类的子类只有一个的话,则可以将它封装为抽象内部类里,从而为用户隐藏了这个无需知道的类.在类库中很常见.
示例如下:
abstract class A //抽象类
{
abstract public void printData();//abstract修饰的方法为抽象方法,无需实现方法体.但是必须被子类覆写
static private class B extends A //需要在抽象类里隐藏的内部类
{
private int Data=12;
public void printData()
{
System.out.println("B Data:"+this.Data); //打印内部类的Data值
}
}
static public A getInstance() //获取实例
{
return new B(); //通过静态方法来获取要隐藏的静态抽象内部类 (静态方法里只能使用静态变量)
}
}
public class Test{
public static void main(String args[])
{
A a = A.getInstance();
a.printData(); //等价于: A.getInstance().printData();
}
}
打印如下:
抽象类缺点:
- 由于Java的单继承,每个类只能从一个抽象类继承.没有接口灵活.
下章学习: 10.JAVA-接口、工厂模式、代理模式、详解
- Java的字符串常量相关的一个问题
- [喵咪Liunx(3)]端口转发工具rinetd
- 基于PhalApi的Smarty拓展
- PhalGo-参数验证过滤
- [喵咪Redis]Redis配置文件和主从设置
- [喵咪Redis]Redis-Sentinel
- [喵咪Redis]Redis安装与介绍
- [喵咪Liunx(4)Monit进程监控
- 【第四期】GC专题
- ML中相似性度量和距离的计算&Python实现
- ASP.NET MVC Model元数据及其定制: Model元数据的定制
- 小白也可以操作的手机TensorFlow教程:Android版和iOS版
- PhalApi-PHPExcel基于PhalApi的PHPExcel拓展
- [喵咪软件推荐(2)]全球服务器测速工具speedtest-cli
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Linux定时自动删除旧垃圾文件的Autotrash工具
- Thinking in DAX with PowerBI - 逻辑框架 - 计算逻辑
- Linux并发执行很简单,这么做就对了
- 一条命令让你明白shell中read命令的常用参数
- 防抖与节流
- 一道题理解Linux中sort命令的多个参数
- Centos7服务器下启动jar包项目的最佳方法
- JavaScript易错点(长期更新)
- Centos7.5配置java环境安装tomcat的讲解
- CSS3卡片光照效果
- Linux文本查找命令find的用法详解
- Canvas系列(2):曲线图形
- Shell中去除字符串里的空格或指定字符的方法
- 使用‘fsck’修复Linux中文件系统错误的方法
- linux/OSX中“DD”命令制作ISO镜像操作系统安装U盘的方法