java抽象方法实例_Java的抽象方法和抽象类实例详解

本文实例讲述了Java的抽象方法和抽象类。分享给大家供大家参考,具体如下:

一 点睛

抽象方法是只有方法签名,没有方法实现的方法。

抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义为抽象类,抽象类里可以没有抽象方法。

抽象类和抽象方法的规则:

抽象类必须使用abstract修饰符来修饰,抽象方法必须使用abstract修饰符来修饰,抽象方法不能有方法体。

抽象类不定被实例化。即使抽象类里不包含抽象方法,这个抽象类也不能创建实例。

抽象类可以包含成员变量、方法(普通方法和抽象方法)、构造器、初始化块、内部类(接口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要用于被其子类调用。

含有抽象方法的类(包括直接定义一个抽象方法;或继承了一个抽象父类,但没有完全实现父类包含的抽象方法;或实现了一个接口,但没有完全实现接口包含的抽象方法三种情况)只能定义为抽象类。

二 代码

1 抽象类

public abstract class Shape

{

{

System.out.println("执行Shape的初始化块...");

}

private String color;

// 定义一个计算周长的抽象方法

public abstract double calPerimeter();

// 定义一个返回形状的抽象方法

public abstract String getType();

// 定义Shape的构造器,该构造器并不是用于创建Shape对象,

// 而是用于被子类调用

public Shape(){}

public Shape(String color)

{

System.out.println("执行Shape的构造器...");

this.color = color;

}

// 省略color的setter和getter方法

public void setColor(String color)

{

this.color = color;

}

public String getColor()

{

return this.color;

}

}

2 Triangle类

public class Triangle extends Shape

{

// 定义三角形的三边

private double a;

private double b;

private double c;

public Triangle(String color , double a

, double b , double c)

{

super(color);

this.setSides(a , b , c);

}

public void setSides(double a , double b , double c)

{

if (a >= b + c || b >= a + c || c >= a + b)

{

System.out.println("三角形两边之和必须大于第三边");

return;

}

this.a = a;

this.b = b;

this.c = c;

}

// 重写Shape类的的计算周长的抽象方法

public double calPerimeter()

{

return a + b + c;

}

// 重写Shape类的的返回形状的抽象方法

public String getType()

{

return "三角形";

}

}

3 Circle类

public class Circle extends Shape

{

private double radius;

public Circle(String color , double radius)

{

super(color);

this.radius = radius;

}

public void setRadius(double radius)

{

this.radius = radius;

}

// 重写Shape类的的计算周长的抽象方法

public double calPerimeter()

{

return 2 * Math.PI * radius;

}

// 重写Shape类的的返回形状的抽象方法

public String getType()

{

return getColor() + "圆形";

}

public static void main(String[] args)

{

Shape s1 = new Triangle("黑色" , 3 , 4, 5);

Shape s2 = new Circle("黄色" , 3);

System.out.println(s1.getType());

System.out.println(s1.calPerimeter());

System.out.println(s2.getType());

System.out.println(s2.calPerimeter());

}

}

三 运行

执行Shape的初始化块...

执行Shape的构造器...

执行Shape的初始化块...

执行Shape的构造器...

三角形

12.0

黄色圆形

18.84955592153876

四 注意

abstract不能用于修饰成员变量,不能用于修饰局部变量,即没有抽象变量、没有抽象成员变量等说法;abstract也不能用于修饰构造器、没有抽象构造器,抽象类里定义的构造器只能是普通构造器。

static和abstract不能同时修饰某个方法,但它们可以同时修饰内部类。

abstract关键字修饰的方法必须被子类重写才有意义,否则这个方法永远不会有方法体,因此abstract方法不能定义为private访问权限,即private和abstract不能同时修饰方法。

希望本文所述对大家java程序设计有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287529.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[python opencv 计算机视觉零基础到实战] 九、模糊

一、学习目标 了解什么是卷积了解模糊的使用方法与应用 如有错误欢迎指出~ 二、了解模糊的应用 上一篇:[python opencv 计算机视觉零基础到实战] 八、ROI泛洪填充 2.1 了解卷积是什么 在本节中,卷积我们不过多的进行深入讲解,我本人对卷积也只是稍…

windows update更新失败 安全模式进不去

今天一同事的电脑遇到问题了,提示“windows update更新失败”。最后一次正确配置不行, 安全模式进不去。解决方法:强制关机开机后F8启动修复模式(系统盘或者pe进入也可以),系统还原,找最后的还原…

windbg的时间旅行实现对 C# 程序的终极调试!

一:什么是时间旅行 简而言之就是把程序的执行流拍成vlog,这样就可以对 vlog 快进或者倒退,还可以分享给别人做进一步的分析,是不是想都不敢想。很开心的是 windbg preview 版本中已经实现了,叫做 时间旅行调试 TTD&…

【神经网络】神经网络结构在命名实体识别(NER)中的应用

命名实体识别(Named Entity Recognition,NER)就是从一段自然语言文本中找出相关实体,并标注出其位置以及类型,如下图。它是NLP领域中一些复杂任务(例如关系抽取,信息检索等)的基础。…

centos安装禅道的步骤

1、下载 XAMPP 套件: https://sourceforge.net/projects/xampp/files/XAMPP%20Linux/stats/timeline 下载的文件是 xampp-linux-x64-7.0.6-0-installer.run 2、 执行 ./xampp-linux-x64-7.0.6-0-installer.run 3、 启动 /opt/lampp/lampp start 4、 下载禅道 ZenTa…

[python opencv 计算机视觉零基础到实战] 十、图片效果毛玻璃

一、学习目标 了解高斯模糊的使用方法了解毛玻璃的图片效果添加了解如何自己做一个噪声图片 上一篇:[python opencv 计算机视觉零基础到实战] 九、模糊 如有错误欢迎指出~ 二、了解模糊与美颜 2.1 使用高斯模糊降噪 由于很多小伙伴反应抛开原理或理论讲解使用用法对于初学…

Android之自定义View实现带4圆角或者2圆角的效果

1 问题 实现任意view经过自定义带4圆角或者2圆角的效果 2 原理 1) 实现view 4圆角 我们只需要把左边的图嵌入到右边里面去,最终显示左边的图就行。 2) 实现view上2圆角 我们只需要把左边的图嵌入到右边里面去,最终显示左边的图就行。 安卓源码里面有这样的类 package and…

java trim()函数_Java - split()函数和trim()函数的使用方法

split()函数和trim()函数的使用方法本文地址: http://blog.csdn.net/caroline_wendy/article/details/24465141详细參考Java API: http://docs.oracle.com/javase/6/docs/api/java/lang/String.htmlsplit()函数是依据參数如",", "-", " "等, 切割…

分布式服务器集群架构方案思考

0x01.大型网站演化 简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。 集群主要分为:高可用集群(High Availability Cluster),负载均衡集群(Load Balance Cluster&…

交互式 .Net 容器版

1背景介绍 在之前的文章 - 交互式 .Net 中已经介绍了什么是 交互式 .Net,文中是通过 Visual Studio Code 插件的方式实现 交互式 .Net 的。现在,我们将使用容器的方式实现 交互式 .Net。2镜像构建 1. DockerfileFROM mcr.microsoft.com/dotn…

Java 集合练习——3

创建Map集合,创建Emp对象,并将创建的Emp对象添加到集合中,并将id为005的对象从集合中移除 创建Emp类: package jihe;public class Emp {private String id;public String getId() {return id;}public void setId(String id) {this…

[python opencv 计算机视觉零基础到实战] 十一找到图片中指定内容

一、学习目标 了解图片内容定位方法matchTemplate使用了解minMaxLoc方法使用 上一篇《[python opencv 计算机视觉零基础到实战] 十、图片效果毛玻璃》 如有错误欢迎指出~ 二、了解从一张图片中找到指定内容的方法 2.1 使用matchTemplate函数对图片中的指定内容进行查找 有…

Linq 实现 DataTable 行转列

前几天写了一篇sqlserver 行转列,http://www.cnblogs.com/li-peng/archive/2012/02/01/2334973.html 由于工作需要,要把查出来的DataTable实现 行转列, 正好这一阵子在用Linq 就做了一个行转列的小例 子 转换前的table: 转换后的table: 代码…

Android Studio之编译提示\app\src\main\res\values\colors.xml:1:1 Error:前言有不允许的内容

1 问题 Android Studio新建立的项目运行莫名其妙提示错误如下 app\src\main\res\values\colors.xml:1:1 Error:前言有不允许的内容 然后我把res目录下面的colors.xml文件打开看如下 <?xml version"1.0" encoding"utf-8"?> <resources>&l…

python顺序执行 toggle_编写脚本在Python中运行多个脚本

我正在建一个闹钟项目。谁能告诉我如何编写一个脚本来调用所有其他脚本吗。例如&#xff0c;我在我的树莓派上有三个脚本叫做LCDTESTFORPI.py&#xff0c;另一个叫做“ex 7”分段.py“还有一个叫”报警pi.py”. 我希望能够运行一个名为“alarmpi”的脚本_初始py“它将运行所有其…

AndroidService 深度分析(2)

AndroidService 深度分析&#xff08;2&#xff09; 上一篇文章我们Service的生命周期进行了測试及总结。这篇文章我们介绍下绑定执行的Service的实现。 绑定执行的Service可能是仅为本应用提供服务&#xff0c;称为本地Service。也可能为其它应用提供跨进程服务&#xff0c;即…

Hello Playwright:(3)基本概念

下面介绍一下 Playwright 中的基本概念&#xff1a;Headless 浏览器Playwright 需要特定版本的浏览器二进制文件才能运行。这些浏览器都支持 2 种 运行模式&#xff1a;Headless&#xff0c;无浏览器 UI&#xff0c;运行速度较快&#xff0c;常用于自动化运行Headed&#xff0c…