Java抽象类和接口的区别详情
作者:海拥 发布时间:2023-05-23 20:09:59
1、抽象类 vs 接口
方法类型: 接口只能有抽象方法。抽象类可以有抽象和非抽象方法。从 Java 8 开始,它也可以有默认和静态方法。
最终变量: 在 Java 接口中声明的变量默认是最终的。抽象类可能包含非最终变量。
变量类型: 抽象类可以有final、
non-final
、静态和非静态变量。接口只有静态和最终变量。实现: 抽象类可以提供接口的实现。接口不能提供抽象类的实现。
继承 vs 抽象: Java 接口可以使用关键字“
implements
”来实现,抽象类可以使用关键字“extends
”进行扩展。多重实现: 一个接口只能扩展另一个Java接口,一个抽象类可以扩展另一个Java类并实现多个Java接口。
数据成员的可访问性: 默认情况下,Java 接口的成员是公共的。Java 抽象类可以具有私有、受保护等类成员。
import java.io.*;
abstract class Shape {
String objectName = " ";
Shape(String name) { this.objectName = name;
}
public void moveTo(int x, int y){
System.out.println(this.objectName + " "
+ "已移至"
+ " x = " + x + " and y = " + y);
}
abstract public double area();
abstract public void draw();
}
class Rectangle extends Shape {
int length, width;
Rectangle(int length, int width, String name){
super(name);
this.length = length;
this.width = width;
}
@Override public void draw(){
System.out.println("矩形已绘制");
}
@Override public double area(){
return (double)(length * width);
}
}
class Circle extends Shape {
double pi = 3.14;
int radius;
Circle(int radius, String name){
super(name);
this.radius = radius;
}
@Override public void draw(){
System.out.println("圆形已绘制");
}
@Override public double area(){
return (double)((pi * radius * radius) / 2);
}
}
class HY {
public static void main(String[] args){
Shape rect = new Rectangle(2, 3, "Rectangle");
System.out.println("矩形面积:"
+ rect.area());
rect.moveTo(1, 2);
System.out.println(" ");
Shape circle = new Circle(2, "Circle");
System.out.println("圆的面积:"
+ circle.area());
circle.moveTo(2, 4);
}
}
输出:
矩形面积:6.0
矩形已移至 x = 1 和 y = 2
圆的面积:6.28
圆已移至 x = 2 和 y = 4
如果我们在矩形和圆形之间没有任何通用代码,请使用界面。
import java.io.*;
interface Shape {
void draw();
double area();
}
class Rectangle implements Shape {
int length, width;
Rectangle(int length, int width){
this.length = length;
this.width = width;
}
@Override public void draw(){
System.out.println("矩形已绘制");
}
@Override public double area(){
return (double)(length * width);
}
}
class Circle implements Shape {
double pi = 3.14;
int radius;
Circle(int radius) { this.radius = radius; }
@Override public void draw(){
System.out.println("圆形已绘制");
}
@Override public double area(){
return (double)((pi * radius * radius) / 2);
}
}
class HY {
public static void main(String[] args){
Shape rect = new Rectangle(2, 3);
System.out.println("矩形面积:"
+ rect.area());
Shape circle = new Circle(2);
System.out.println("圆的面积:"
+ circle.area());
}
}
输出:
矩形面积:6.0
圆的面积:6.28
什么时候用什么?
如果以下任何陈述适用于您的情况,请考虑使用抽象类:
在
java
应用程序中,有一些相关的类需要共享一些代码行,那么你可以将这些代码行放在抽象类中,并且这个抽象类应该由所有这些相关类进行扩展。您可以在抽象类中定义非静态或非最终字段,以便您可以通过方法访问和修改它们所属的对象的状态。
您可以期望扩展抽象类的类具有许多公共方法或字段,或者需要除
public
之外的访问修饰符(例如protected
和private
)。
如果以下任何陈述适用于您的情况,请考虑使用接口:
它是一个完全的抽象,接口中声明的所有方法都必须由实现此接口的类来实现。
一个类可以实现多个接口。它被称为多重继承。
您想指定特定数据类型的行为,但不关心谁实现其行为。
来源:https://juejin.cn/post/7033654342313836575


猜你喜欢
- 数据存储与访问常用方式:文件SharedPreferences(偏好参数设置)SQLite数据库内容提供者(Content provider
- 前言记录下Mybatis-Plus中条件构造器Wrapper 的一些基本用法。查询示例表结构CREATE TABLE `product` (
- 要用TextView使用渐变色,那我们就必须要了解LinearGradient(线性渐变)的用法。LinearGradient的参数解释Li
- 本文实例讲述了Windows窗体的.Net框架绘图技术实现方法,非常实用,具体内容如下:一般来说,当编写一个典型的Windows 窗体程序时
- RecyclerView 已经出来很久了,但是在项目中之前都使用的是ListView,最近新的项目上了都大量的使用了RecycleView.
- 一,背景之所以会想到一个服务同时使用eureka和nacos,是因为遇到一个需求,配置数据是存储在nacos的配置中,然后使用该配置的服务却
- 安装方式:1):通过ppa(源) 方式安装.2):通过官网安装包安装.JDK官网下载地址一:使用ppa(源)方式安装:1):添加ppa源su
- 一、概述Socket类是Java执行客户端TCP操作的基础类,这个类本身使用代码通过主机操作系统的本地TCP栈进行通信。Socket类的方法
- 本文实例为大家分享了C#根据http和ftp地址获取对应图片的具体代码,供大家参考,具体内容如下public class GetBitmap
- 在servlet中,转发和重定向是由request和response完成的。两者之间的区别请看我之前的文章。那么在springMVC中是如何
- 前言对于多线程,大家应该很熟悉。但是,大家了解线程池吗?今天,我将带大家全部学习关于线程池的所有知识。目录1. 简介2. 工作原理2.1 核
- 在【解决方案资源管理器】中找到Form1.cs,单击,快捷键F2重命名为“Login.cs”(命名很
- 本文实例讲述了C#简单实现显示中文格式星期几的方法。分享给大家供大家参考,具体如下:1.DateTime.Now.ToString(&quo
- springboot启动时自动加载application.properties或者application.yml,如何定义自己的配置让spr
- /// <summary> /// 通过IP得到IP所在地省市(Po
- Zookeeper和Eureka哪个更好?1、CAP理论一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求C:数据一致性
- 效果图代码/** * * 日图表 * zrj 2020/8/25 */class SleepDayChart(context: Contex
- 本文通过老王和小王买车,引出设计模式中的结构型设计之桥接模式,接着说明设计型模式的概念和代码实现,为了加深理解,会说明适配器设计模式在JDB
- 第一部分:Java数据结构要理解Java数据结构,必须能清楚何为数据结构?数据结构:Data_Structure,它是储存数据的一种结构体,
- 类是使用关键字 class 声明的,如下面的示例所示:访问修饰符 class 类名 { //类成员: // Methods, prope