Java入门篇 之 抽象类接口

news2024/10/7 12:17:25

本篇碎碎念:个人认为压力是一种前进的动力,但是不要有太多压力,不然会使心情烦躁,会控制不住自己的情绪,会在一个临界值爆发,一旦爆发,将迟迟不能消散

今日份励志文案: 努力的背后必有加倍的赏赐

少年要把压力转变为动力哦!!!

目录

 抽象类

下面是抽象方法声明采用的语法以及注意事项:(引用了abstrac关键字)

抽象类的总结

接口

interface使用方法:

implements使用方法:

接口的总结

 抽象类和接口的区别

Object类(简单了解,具体会在下一章讲解)


 抽象类

首先,我们要学习抽象类,尽管在构建具有某些未实现方法的类时,你的第一想法可能是创建接口,但是抽象类仍旧是用于此目的的一种重要的工具。因为你不可能总是使用纯接口

抽象类:如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类

不同的子类可以用不同的方式表示此接口,通用接口建立起一种基本形式,以此表示所有导出类的共同部分,我们创建抽象类是希望通过这个通用接口操作一系列类,为此Java提供了一个叫抽象方法的机制,这种方法是不完整的,仅有声明没有方法体

下面是抽象方法声明采用的语法以及注意事项:(引用了abstrac关键字

abstract class 函数名{
     abstract void Dog();
}


1.方法被abstract修饰,包含abstract这个类也必须被abstract修饰

代码演示:

2.抽象类不能被实例化

代码演示: 

 

3.如果一个普通类继承了一个抽象类,那么此时,这个类必须重写这个抽象方法

代码演示: 

 

重写之后的代码 

 

public static void main(String[] args){
        Ball ball=new Basketball() ;
        ball.play();
    }

这里运用了向上转型:简单介绍一下,父类引用指向子类对象,具体在博主上一篇Java入门篇 之 多态中有详细介绍

4.抽象类和普通类的区别在于:

(1)可以个普通类一样,有成员变量和成员方法

(2)就是多了抽象方法

(3)多了不能实例化

5.什么情况下要设计为抽象类

如果这个类不能描述一个具体的对象,那么就可以描述为抽象类

对于抽象类使用的代码如下:

abstract class Ball{
    public String name;
    abstract void play();{

    }
}
class Basketball extends Ball{

    @Override
    void play() {
        System.out.println("打篮球");
    }
}
class Football extends Ball{

    @Override
    void play() {
        System.out.println("踢足球");
    }
}
class Volleyball extends Ball{

    @Override
    void play() {
        System.out.println("打排球");
    }
}




public static void output(Ball ball){
        ball.play();
    }

    public static void main(String[] args){
        Ball ball1=new Basketball() ;
        Ball ball2=new Football() ;
        Ball ball3=new Volleyball() ;

        ball1.play();
        ball2.play();
        ball3.play();
        
        //这是第二种输出方式借用output输出
        //注意,函数类型是静态的才可以哦,不然会报错的
        //如果问为什么?
        //博主回答,静态方法在访问本类的成员时,只允许访问静态成员
        //而不允许访问实例成员和实例方法
        Ball[] ball={ball1,ball2,ball3};
        for (Ball a:ball) {
            output(a);
        }

    }

看完这个代码,你们有没有认为这个代码与多态的代码很像呢?

没错这个就是多态,多态就是一个对象在不同条件下的表现出的不同形式

抽象类的总结

1.被abstract 修饰的方法叫做抽象方法,没有具体的实现的
2.如果一个类 包含了这个抽象方法,此时这个类也必须得用abstract修饰。此时这个类被叫做抽象类
3.抽象类当中 可以有和普通类当中一样的成员变量和成员方法
4.和普通类不一样的地方就是这个抽象类不能被实例化
5.当一个普通类继承了这个抽象类,那么这个普通类必须重写抽象方法。    abstract class Perso    
6.抽象方法不能被private修饰,final修饰,static修饰    

7抽象类当中可以包含构造方法,这个构造方法并不是在实例化这个抽象类的时候使用,因为他就不能被实例化。那么这个构造方法,主要是在子类当中让子类调用,帮助父类进行初始化。

接口

abstract关键字允许人们在类中创建一个或多个没有任何定义的的方法----提供了接口部分,但是没有提供任何相应的具体实现,这些实现是由此类的继承者创建的

interface这个关键字产生了一个完全抽象的类,他根本就没有提供任何具体实现。它允许创建者确定方法名,参数列表和返回类型,但是没有任何方法体,接口只提供了形式,而未提供任何具体实现

任何使用某特定接口的代码都知道可以调用该接口的哪些方式,而且仅需知道这些。因此接口被用来建立类与类之间的关系

要让一个类寻准某个特定接口(或者是一组接口),需要用implements关键字,他表示interface只是他的外貌,但是现在我要声明它是任何工作的,它看起来还很像继承

interface使用方法:


public interface 接口名称{
    //抽象方法
    public abstract void method1();
    public void method2();
    abstract void method3();
    void method4();
}

public abstract 是固定搭配,可以不写

在接口中上述写法都是抽象方法,更推荐方式4,代码更简洁

接口不能直接使用,必须要有一个"实现类"来"实现"接口,实现接口中所有的抽象方法

implements使用方法:

public class 类名称 implements 接口名称{
  //...
}

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

代码演示:

class Instrument{
    public String name;
    public Instrument(String name){
        this.name=name;
    }
}
interface Play{
    void play();
}
interface Knock{
    void knock();
}
interface Pull{
    void pull();
}
class Guitar extends Instrument implements Play,Knock{
    public Guitar(String name){
        super(name);
        // 在给实现子类的构造方法前
        // 先要用super()调用实现父类的构造方法
        // 因为父类自己定义了构造方法
        // 编译器不会自动给给子类构造方法中添加super();
    }

    @Override
    public void play() {
        System.out.println("弹"+this.name);
    }

    @Override
    public void knock() {
        System.out.println("敲"+this.name);
    }
}
public class demo8 {
    public static void main(String[] args){
        //实例化对象
        Guitar guitar=new Guitar("吉他");
        guitar.play();
        guitar.knock();
    }

}

接口的总结

1.定义接口的时候使用关键字interface 来定义

2.接口当中的方法如果没有被实现,那么他默认就是一个抽象方法。

3.接口当中的方法不能有具体的实现

4.如果要有具体的实现,那么必须是由default修饰或者是由static修饰

5.接口当中定义成员变量默认都是public static final的

6.接口当中的抽象方法默认都是public abstract修饰的

7.接口是不可以被实例化的

8.类和接口之间的关系可以使用implements来关联

9.接口也是可以产生字节码文件的

10.一个类 可以继承一个抽象类/普通类同时还可以实现这个接口

 抽象类和接口的区别

1.抽象类当中 可以包含和普通类一样的成员变量和成员方法,但是接口当中的成员变量只能是 public static final的方法只能是public abstract的

2.一个类只能继承一个抽象类,但是能够同时实现多个接口,所以解决了java当中不能进行多继承的特性

Object类(简单了解,具体会在下一章讲解)

Object是Java默认提供的一个类(是所有类的先祖)

Java里面出来Object类,所有的类都是存在继承关系的,米热播会继承Object父类。即所有类的对象都可以使用Object的引用接收

接口间的继承

在Java中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承,

在实例内部类当中,定义一个静态的成员变量,必须是一个常量

Public static final int date=1;

如果有解释的不对或者不清晰,如果可以从评论区指出,我一定会加以修改,万分感谢

希望对你们有所帮助

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

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

相关文章

用cmd看星球大战大电影,c++版本全集星球大战,超长多细节

用cmd看星球大战 最近发现了一个有趣的指令。 是不是感觉很insteresting呢 教程 进入控制面板,点击系统与安全 然后,进入以后,点击启用或关闭 Windows 功能 启用Telnet Client并点击确定 用快捷键winr打开我们的cmd 输入指令 telnet towe…

使用百度翻译API或腾讯翻译API做一个小翻译工具

前言 书到用时方恨少,只能临时抱佛脚。英文pdf看不懂,压根看不懂。正好有百度翻译API和腾讯翻译API,就利用两个API自己写一个简单的翻译工具,充分利用资源,用的也放心。 前期准备 关键肯定是两大厂的翻译API&#x…

Transformer笔记

Transformer encoder-decoder架构 Encoder:将输入序列转换为一个连续向量空间中的表示。Encoder通常是一个循环神经网络(RNN)或者卷积神经网络(CNN),通过对输入序列中的每个元素进行编码,得到…

spass-二元变量相关分析

基础概念 计算相关系数r&#xff1a;利用样本数据计算样本相关系数&#xff0c;样本相关系数反映了两变量间线性相关程度的强弱。相关系数的取值范围界于-1与1之间&#xff0c;即-1≤r≤1 当0<r ≤ 1&#xff0c;表明变量之间存在正相关关系&#xff1b; 当-1 ≤ r…

pythongui实时闹钟

# codinggbk import tkinter as tk from time import strftime# 创建一个主窗口 root tk.Tk() root.title("实时闹钟")# 设置窗口的大小不可变 root.resizable(False, False)# 设置窗口始终保持在最上层 root.attributes(-topmost, True)# 更新时间的函数 def time(…

038、语义分割

之——介绍与数据集 杂谈 语义分割&#xff0c;语义分割(Semantic Segmentation)方法-CSDN博客&#xff1a; 语义分割是计算机视觉领域的一项重要任务&#xff0c;旨在将图像中的每个像素分配到其对应的语义类别中。与物体检测或图像分类不同&#xff0c;语义分割不仅要识别图像…

linux网络——HTTPS加密原理

目录 一.HTTPS概述 二.概念准备 三.为什么要加密 四.常⻅的加密⽅式 1.对称加密 2.⾮对称加密 五.数据摘要&#xff0c;数字签名 六.HTTPS的加密过程探究 1.方案一——只使用对称加密 2.方案二——只使⽤⾮对称加密 3.方案三——双⽅都使⽤⾮对称加密 4.方案四——⾮…

元素水平垂直居中

方法一&#xff1a;定位transform 方法二&#xff1a;flex布局 方法三&#xff1a;定位margin【需要child 元素自身的宽高】 相关HTML代码&#xff1a; <div class"parent"><div class"child"></div> </div> 方法一&#xff1a…

许多网友可能还不知道,升级到Windows 11其实没那么复杂,只要符合几个条件可以了

如果你的Windows 10电脑可以升级Windows 11,现在怎么办?有几种方法可以免费安装新的操作系统。以下是你的选择。 如果你想升级到Windows 11,你可以随时购买一台已经安装了操作系统的新电脑。然而,如果你目前的Windows 10 PC满足所有必要的升级要求,那么在Windows 11免费的…

AIRLOOK与商汤科技强强联合,打造“实景三维与AI大模型”结合的全新盛宴

实景三维中国建设作为数字中国建设的重要内容之一&#xff0c;是一项涉及多方面技术支撑的综合性工程&#xff0c;同时作为AI技术在其中发挥着至关重要的作用&#xff0c;AI大模型的发展也将进一步推动实景三维建模技术的创新和发展。在此背景下&#xff0c;AIRLOOK与商汤科技携…

AUTODL云服务器使用大致步骤(适合本人版)

(一)在官网上创建一个服务器 (二)远程连接指令&#xff1a; 改为&#xff1a; (三)连接后&#xff0c;可在中进行代码运行 输入一些指令 python ......

Backtrader绘图cerebro.plot报错问题的处理

Backtrader绘图cerebro.plot报错问题的处理 1.问题描述 在jupyter 中使用BackTrader &#xff0c;使用绘图功能时&#xff1a; cerebro.plot() 提示错误&#xff1a;ValueError: Axis limits cannot be NaN or Inf 由于backtrader 要求有7列数据&#xff0c;最后一列openint…

Halcon (5):Halcon Solution Guide I basics 导论解析

文章目录 文章专栏前言文章目录翻译文档的说明 结论 文章专栏 Halcon开发 前言 今天开始看Halcon的官方文档。由于市面上的教学主要是以基础的语法&#xff0c;算子简单介绍为主。所以我还是得看官方的文本。别的不多说了。有道词英语词典&#xff0c;启动。 还有就是今天LOL…

Python基础:错误和异常

在Python中的错误可&#xff08;至少&#xff09;被分为两种&#xff1a;语法错误和 异常&#xff0c;均是指在程序中发生的问题和意外情况。Python提供了异常处理机制&#xff0c;使程序能够更容易地应对这些问题。 1. 语法错误&#xff08;Syntax Error&#xff09; 语法错误…

C++算法入门练习——树的带权路径长度

现有一棵n个结点的树&#xff08;结点编号为从0到n-1&#xff0c;根结点为0号结点&#xff09;&#xff0c;每个结点有各自的权值w。 结点的路径长度是指&#xff0c;从根结点到该结点的边数&#xff1b;结点的带权路径长度是指&#xff0c;结点权值乘以结点的路径长度&#x…

前端必备工具

一、百度Ai功能合集 https://chat.baidu.com/ 二、超级复制 这是一个edge插件&#xff0c;那些禁止复制的文本&#xff0c;用这个插件点一下图标&#xff0c;会把当前网页解除禁止复制。 三、集中工具箱 例如一键抠图&#xff0c;感觉还可以&#xff1a; 四、代码漂亮截图 几…

七、文件包含漏洞

一、文件包含漏洞 解释&#xff1a;文件包含漏洞是一种注入型漏洞&#xff0c;其本质就是输入一段用户能够控制的脚本或者代码&#xff0c;并让服务端执行&#xff1b;其还能够使得服务器上的源代码被读取&#xff0c;在PHP里面我们把可重复使用的函数写入到单个文件中&#x…

三菱PLC 模拟量输出模拟量转换功能块S_RTI(内嵌ST)

模拟量输出模拟量转换功能块S_RTI算法原理和公式介绍请参考下面文章链接: PLC模拟量输出 模拟量转换FC S_RTI-CSDN博客文章浏览阅读5.3k次,点赞2次,收藏11次。1、本文主要展示西门子博途模拟量输出转换的几种方法, 方法1:先展示下自编FC:计算公式如下:intput intput Rea…

linux 定时执行脚本

先写一个简单的shell脚本用来测试定时执行脚本 [rootVM-12-12-centos wz]# cat shell_cron_test.sh #!/bin/bashif [ -f "/home/wz/cron_test.txt" ];thennum$(($(wc -l /home/wz/cron_test.txt | cut -d -f 1)1))elsenum1 fi echo "$(date "%y-%m-%d …