JavaSE——抽象类和接口详解

简介: JavaSE——抽象类和接口详解

目录

  1. 抽象类
  1. 接口
  1. 抽象类与接口
  2. 抽象类

1.1 认识抽象类
概念:一个类没有足够的信息去描述一个具体的对象时,这个类就是一个抽象类

语法:一个被abstract修饰的类称为抽象类,抽象类中被abstract修饰的方法称为抽象方法,抽象方法不用给出具体的实现体

格式:

示例: 

abstract class Shape{

abstract public void draw();
abstract void calcArea();

public double getArea(){
    return area;
}
protected double area;

}
抽象方法没有方法体

抽象类也可以增加普通方法与属性、构造方法

1.2 抽象类的特性总结
1.抽象类不能实例化

2.抽象方法不能是 private 修饰

3.抽象方法需要被子类继承,因此不能被final和static修饰

4.抽象类必须被继承,且子类必须重写父类的抽象方法,否则子类也是抽象类

abstract class Shape{

abstract public void draw();
abstract void calcArea();

public double getArea(){
    return area;
}
protected double area;

}
class Circle extends Shape{

private double r;
final private static double PI = 3.14;

public Circle(double r) {
    this.r = r;
}

@Override
public void draw() {
    System.out.println("圆形:r"+r);
}

@Override
void calcArea() {
    area = PI*r*r;
}
@Override
public double getArea() {
    return super.getArea();
}

}
5.抽象类中不一定包含抽象方法,有抽象方法的类一定是抽象类

6.抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量

1.3 抽象类的一个重要作用

  1. 接口

2.1 如何理解接口?
接口就是公共的行为规范标准,实现时,只要符合规范标准,就可以通用

电子产品的USB、电源插座等

 语法:

接口的定义与类基本相同,关键字:interface

  1. 创建接口时, 接口的命名一般以大写字母I开头
  2. 接口的命名一般使用 "形容词" 词性的单词

public interface Inter {

   //抽像方法
    void method();

}
2.2 接口的使用
接口是不能直接使用的,要定义具体类来实现接口中的所有抽象方法

关键字:implements

注意:子类和父类之间是extends 继承关系,类与接口之间是 implements 实现关系

格式:

public class 类名称 implements 接口名称 {

    //...

}
2.3 接口特性

报错: 'A'中的'openDevice()'与'USB'中的'openDevice()'冲突;试图分配较弱的访问权限('package-private');“公共”

 报错:类“A”必须被声明为抽象,或者在“USB”中实现抽象方法“USB()”

2.4 实现多个接口

看一个例子:

public class Test {

public static void main(String[] args) {
    dragon drag = new dragon("dragon");
    drag.fly();
    drag.swim();
}

}

//定义一个动物类
class Animal{

protected String name;

public Animal(String name){
    this.name = name;
}

}
//定义接口

interface IFlying{

void fly();

}

interface ISwimming{

void swim();

}
//定义鸟类

class Bird extends Animal implements IFlying{

public Bird(String name) {
    super(name);
}

@Override
public void fly() {
    System.out.println(name+"正在用翅膀飞");
}

}
//定义鱼类

class Fish extends Animal implements ISwimming {

public Fish(String name) {
    super(name);
}

@Override
public void swim() {
    System.out.println(name+"正在用尾巴游");
}

}
//定义龙类

class dragon extends Animal implements ISwimming,IFlying{

public dragon(String name) {
    super(name);
}

@Override
public void fly() {
    System.out.println(name+"正在腾云驾雾");
}

@Override
public void swim() {
    System.out.println(name+"正在海里游");
}

}

2.5 接口间的继承

关键字:extends

interface IAmphibious extends IFlying,ISwimming{

@Override
void fly();
@Override
void swim();

}
class dragon1 extends Animal implements IAmphibious{

public dragon1(String name) {
    super(name);
}
@Override
public void fly() {
    //...
}
@Override
public void swim() {
    //...
}

}

3.抽象类与接口

抽象类的存在是为了让编译器更好的校验❌

语法上的区别:

1.抽象类的成员变量是无限制的,接口中的成员变量只能是public static final类型的

2.抽象类可以提供成员方法的实现细节,接口中只能存在public abstract 方法

3.抽象类可以有静态代码块和静态方法,接口中不能含有静态代码块以及静态方法

4.一个类只能继承一个抽象类,一个类却可以实现多个接口

相关文章
|
XML 关系型数据库 MySQL
python将word(doc或docx)的内容导入mysql数据库
用python先把doc文件转换成docx文件(这一步也可以不要后续会说明),然后读取docx的文件并另存为htm格式的文件(上一步可以直接把doc文件另存为htm),python根据bs4获取p标签里的内容,如果段落中有图片则保存图片。(图片在word文档中的位置可以很好的还原到生成的数据库内容) 我见网上有把docx压缩后解压获取图片的,然后根据在根据xml来读取图片的位置,我觉得比较繁琐。用docx模块读取段落的时候还需要是不是判断段落中有分页等,然而转成htm之后就不用判断那么多直接判断段落里的样式或者图片等就可以了。
331 1
|
数据可视化 项目管理 开发工具
使用SourceTree可视化更新git代码
使用SourceTree可视化更新git代码
|
定位技术 数据安全/隐私保护 iOS开发
一文讲清楚地图地理坐标系
一文讲清楚地图地理坐标系
644 0
|
9月前
|
数据采集 机器学习/深度学习 人工智能
智能运维在IT管理中的实践与探索
【10月更文挑战第21天】 本文深入探讨了智能运维(AIOps)技术在现代IT管理中的应用,通过分析其核心组件、实施策略及面临的挑战,揭示了智能运维如何助力企业实现自动化监控、故障预测与快速响应,从而提升整体运维效率与系统稳定性。文章还结合具体案例,展示了智能运维在实际环境中的显著成效。
488 133
|
8月前
|
存储 搜索推荐 算法
大数据在电子健康记录中的潜力与挑战:一次技术和伦理的深度碰撞
大数据在电子健康记录中的潜力与挑战:一次技术和伦理的深度碰撞
237 12
|
Kubernetes Cloud Native 持续交付
容器化、Kubernetes与微服务架构的融合
容器化、Kubernetes与微服务架构的融合
472 82
|
资源调度 数据可视化 JavaScript
一个高效的低代码表单,可视化设计,一键生成源码,享受更多摸鱼时间!
Variant Form 是一款基于 Vue 2 的低代码表单生成器,采用可视化拖拽设计界面,支持一键生成完整源码,大幅降低开发复杂度。它具备高度自定义配置能力,能够满足不同场景需求,并且完全开源免费。通过简单的拖拽操作,用户可以轻松创建表单,同时还能自定义 CSS 样式、校验逻辑及多语言支持等功能。安装便捷,兼容多种环境,极大提升开发效率。赶紧试试 Variant Form,享受高效开发的乐趣吧!
317 0
|
JavaScript 开发工具
Vue2相关组件项目依赖版本信息
这篇文章展示了一个Vue 2项目中相关组件和开发依赖的版本信息,包括axios、echarts、swiper等库以及eslint等开发工具的特定版本。
360 1
Vue2相关组件项目依赖版本信息
|
Ubuntu Linux 数据中心
阿里云服务器纯净版系统及系统版本参考与相关使用说明
在我们选购阿里云服务器的时候,操作系统有公共镜像、自定义镜像、共享镜像、云市场镜像、社区镜像可选,其中公共镜像为纯净版系统,这些系统皆已正版授权,旨在为ECS实例上的应用程序提供安全、稳定的运行环境。本文为大家汇总了阿里云服务器纯净版系统及最新的系统版本以及相关使用说明,以供大家了解和选择。
阿里云服务器纯净版系统及系统版本参考与相关使用说明
|
搜索推荐 数据挖掘 BI
问卷调查软件精选,效能与易用双赢
本文推荐了四款问卷调查软件:ZohoSurvey、SurveyMonkey、GoogleForms和Typeform。ZohoSurvey功能全面,性价比高,适合中小企业和个人;SurveyMonkey功能强大,适合大型企业和科研机构;GoogleForms免费易用,适合预算有限的用户;Typeform注重用户体验,适合需要高参与率的调查。选择时需综合考虑功能、易用性和品牌信任度等因素。
369 2