javaSE10--final关键字-抽象类-接口-抽象类接口区别_靠谱的大钊的博客-程序员秘密

技术标签: 接口  抽象类  java  javaSE    多态  

final关键字

  • final用于声明属性,方法和类,可以修饰类,修饰字段,修饰方法,修饰局部变量,修饰形参

  • 属性:定义就必须直接赋值或者在构造方法中进行赋值,并且后期不能修改,

  • 修饰修饰类,最终类,不能被继承,不能被定义为抽象类或者接口

  • 修饰字段,必须显示初始化,不能被修改,一般final与static同时修饰某个字段,所有字母都大写,表示final常量

  • 修饰方法:bueng子类不能被覆盖 能被子类继承

  • 修饰局部变量, 一旦初始化就不能再修改, 注意final修饰引用类型变量, 是指这个引用类型变量不能再指向其他对象,可以修饰它的属性值

  • 修饰方法形参, 在方法体中不能修改final形参的值

final属性赋值:

–在声明时同时赋值,往往与static一起使用

final static int Num = 10;
package com.nie.day5.demo06;

public class Filal {
    
    //用于声明方法和类
    //final修饰常量,常量值不能变,利用static 修饰 节省空间
    final static int Num = 10;
    final int a = 100;


    public final void eat() {
    
        System.out.println("你好");
    }

    //定义就必须直接赋值或者在构造方法中进行中进行赋值,后期不能修改
    public void num(int a) {
    
//       this.a=1000;
        System.out.println(a);
    }


    //在方法参数前加final关键字,防止数据在方法题中被修改.
    public void num1(final int b) {
    
//        b=11;
    }
}

抽象类

为什么定义抽象类?

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

  • 抽象类除了不能实例化对象之外,类的其他功能依然存在,名成变量,成员方法和构造方法的访问方式和普通类一样.


如何定义抽象类

  • abstract修饰的类就是抽象类,如果某个类中包含抽象方法,那么这个类就必须定义抽象类.

为什么定义抽象方法:

当一个类的某个操作无法具体实现时,这个操作可以定义为抽象方法,使用abstract修饰方法, 只有方法的声明, 没有方法体

  • 抽象方法时一种特殊的方法:他只有声明,而没有具体的实现
  • 抽象方法必须用abstract关键字进行修饰

如何使用抽象类

  • 抽象类一般作为其他类的父类存在,
  • 子类继承了抽象类,子类需要重写抽象类中所有的抽象方法,如果没有重写所有的抽象方法子类也需要为定义抽象方法

注意:

抽象类中不一定含有抽象方法

  1. 抽象类可以有成员属性和非抽象方法

  2. 抽象类不能被实例化,但可以有构造函数.因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象

  3. 抽象类不能创建对象:抽象类只能做基类,表示一种继承关系.

  4. 构造方法和静态方法不可以用abstract,


abstract与final不共存

  • 因为abstract不能实例bai化(没有构造方法),du需要有子类zhi来实现,而final为“最终的”,修饰类时表示不能被继承既没有子类,这两个就矛盾了。
    但是呢,一个abstract类里面可以有final关键字存在,前提是这个final修饰的方法必须在abstract类中已经实现,作用是继承它的子类不能重写这个方法

[访问权限] abstract class 类名 {
    
		成员列表
	}

public abstract class Shapes {
    
	public abstract void draw();
}

public abstract class Shapes {
    
	public void draw(){
    
         //具体代码
       }
}

然后我们定义个抽象类

在这里插入图片描述

抽象类无法被直接实例化,我们可以让子类继承然后实例化子类

在这里插入图片描述

然后我们实例化子类

在这里插入图片描述

接口

接口的基本概念:

Java中只支单继承,如果向定义一些功能,想让一个子类都能继承实现,提供接口,这样我们就可以用一个子类去实现多个接口.**.可以理解为接口时特殊的抽象类.**这种抽象类中只包含常量和方法的定义,没有变量和方法的实现.

接口设计时候:关系实现类有何做哟个,不关心内部细节,面向接口的约定而不考虑接口的具体实现.

接口的定义:

public interface Animal1 {
    
    //所有属性默认为: public static final
    void eat1();

    //所有方法都是:public abstract
    void foo();
}
  • 定义接口: interface

    [访问修饰符]  interface  接口名称  [extends 其他的接口名1,.其他的接口名n] {
           	
            // 声明常量
           // 抽象方法
     }
    
  • 接口使用 :implements

    [访问修饰符] class 类名 implements 接口名1,接口名2……{
           }
    
  • 结合继承:

    [访问修饰符] class 类名 extends 父类名 implements 接口名1,接口名2……{
           }
    

接口的特性:接口不能被实例化,实现类必须重写接口的所有方法,实现类可以实现多个接口,接口中的变量都是静态.

接口一

/**
 * 本质上说接口就是一个抽象类,
 * 抽象类中只包含常量和方法的定义,
 * 没有变量和方法的实现
 */
public interface animal extends Animal1 {
    
    //所有属性默认为 public static final
    // public static final int age=10;
    //变量必须赋值
    int age = 10;

    //默认的为public  abstract
    //抽象方法访问时必须进行重写
    void eat();

    public abstract void test();

    //jdk8后接口可以使用默认方法,和静态方法
    //比抽象方法更加灵活,根据功能方法进行选择
    public default void test1() {
      //被子类重写
        System.out.println("默认方法");
    }

    public static void test2() {
    //通过类名访问4
        System.out.println("静态方法");
    }
}

接口二

public interface Animal1 {
    
    //所有属性默认为: public static final
    void eat1();

    //所有方法都是:public abstract
    void foo();
}

接口三

public interface Animal2 {
    
    void  test3();
}

//定义为抽象类  或者
//重写抽象方法

/**
 * 一个类可以实现多个接口,
 * <p>
 * 一个类可以实现继承一个类
 * 但是可以实现多个接口
 */
public class Dog implements animal, Animal1, Animal2 {
    

    //抽象方法访问时必须进行重写
    @Override
    public void eat() {
    
        System.out.println("抽象方法\t吃");
    }

    @Override
    public void test() {
    
        System.out.println("抽象方法测试");
    }

    @Override
    public void eat1() {
    
    }

    @Override
    public void foo() {
    
    }

    @Override
    public void test3() {
    
    }
}

测试

public class Test {
    
    public static void main(String[] args) {
    
        Dog dog =new Dog();
        dog.eat();
        dog.test();
        dog.test1();//默认方法//
        animal.test2();//静态方法
    }
}

接口的特性:

  • 接口是特殊的抽象类,当声明一个接口的时候必须要声明abstract关键字
  • 接口中每一个方法也是隐式抽象的,默认public abstract 。jdk8以后有默认和静态方法 public static 方法, public default方法
  • 接口中声明的属性默认为 public static final
  • 接口不能被继承,要被实现implements
  • 接口不能实例化对象(灭有构造方法),但是可以声明对象的引用(多态性)
  • 有接口多有多态。多态的条件(子类重写父类方法,继承,父类引用指向子类对象)因为接口中有抽象方法,所以必须要重写,实现(implements)可以理解为在接口环境下继承(extends)的另一个名字
  • 多个类可以使用一个接口
  • 一个类可以实现多个接口,但只能继承一个类
  • 一个类可以继承多个接口,使用关键字extends,可以继承多个接口,使用 逗号 分割
  • 在类实现接口的时候,类要实现接口的所有方法,或者类必须设置为抽象类
  • 接口体现的是is-a的关系

接口的好处

  • 快速增强子类功能,符合面向对象的思想
  • 可扩展性强,当需要增强原有类的功能不需要修改原有类的代码,只需要增加接口.

接口和抽象类的区别:

区别

  • 抽象类可以构造方法,接口不可以
  • 抽象类可以有普通成员变量,抽象类不行
  • 抽象类有非抽象的普通方法,而接口中所有的方法必须是抽象的(jdk8以后有默认和静态方法)
  • 抽象类中的抽象方法访问类型可以是public ,protected和默认类型,但接口中的抽象方法只能是public类型的
  • 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义静态常量。

不同点:

  1. 意义不同

    • 抽象类是对事物更高层级的抽象
    • 接口是对功能的封装
  2. 定义方式不同

    • 抽象类用 abstract class定义
    • 接口用interface定义
  3. 内容不同

    • 抽象类中除了抽象方法外,还可以定义构造方法等普通类中定义的所有成员

    • 接口除了抽象方法等这四个内容外, 不能定义构造方法等内容

      public abstract修饰, 接口中还可以定义public static final常量 , public static 方法, public default方法

  4. 使用方式不同

    • 抽象类需要被子类extends继承
    • 接口需要被实现类implements实现
  5. 类只支持单继承, 接口支持多继承

  6. 应用场景不同

    • 一般情况下, 对类进行功能的扩展,优先选择接口
    • 除了扩展功能外, 还需要保存不同的数据,只能选择抽象类;
    • 抽象类的抽象方法需要子类重写,
    • 抽象类还可以约束所有的子类都具有相同的功能.

相同点:

​ 1)都可以定义抽象方法

​ 2)都不能实例化对象,创建对象

​ 3)定义的抽象方法都需要被重写

​ 4)都可以定义public static方法, public static final常量

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44236958/article/details/109349119

智能推荐

strrchr_x-2010的博客-程序员秘密

头文件:const char *strrchr(const char *str, int character);char *strrchr(char *str, int character);作用:返回一个指针,它指向字符character在字符串str中最后出现的位置。结尾处的null字符被认为是字符串的一部分。因此,指针也可返回字符串结尾的null字符。参数

关于数据泵impdp参数验证(一)_congxun2599的博客-程序员秘密

关于数据泵impdp导入的部分参数的使用验证,本章验证的参数包括remap_data、remap_datafile、remap_schema、remap_table、remap_tablespace、reuse_dataf...

Java- @SuppressWarnings注解用法详解_superwarnings注解_小白的Python梦的博客-程序员秘密

@SuppressWarnings注解用法详解一、注释类型:当你的编码可能存在警告时,比如安全警告,可以用它来消除。API中是这样描述的:指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告。注意,在给定元素中取消显示的警告集是所有包含元素中取消显示的警告的超集。例如,如果注释一个类来取消显示某个警告,同时注释一个方法来取消显示另一个警告,那么将在此方法...

工科女生求职记——电子信息科学与技术专业_电子科学与技术女_HITSherry的博客-程序员秘密

找完工作已经半个来月了,总觉得应该留下点儿什么记载,来纪念一下人生中的第一次求职。大家都说女生求职不容易,但我作为一个学电子信息科学与技术专业的硕士,用不到半个月的时间拿下七八个offer,总体感觉比较满意,希望找工作的女性同胞更加自信一点,肯定可以找到好的工作;男同胞们就更加不用说了,性别正确,努力一点能拿到更好的offer.

git创建项目的两种方式_weixin_30249203的博客-程序员秘密

场景1: 将本地内容推送给远程库1.创建版本库git init 将此目录转换为git可管理的仓库git config --global user.name "xx" 或 git config --global user.email "xx"(都配也行)配置你的用户名或者密码,git每次提交都会带上这些信息git add . 文件添加到暂存区(stage)git commit...

植物中文年度加强版_谁动了我的魔方的博客-程序员秘密

记住,太阳每天都是新的,不要辜负了美好的晨光。引导语:有时候人就是这样,遇到再大的事自己扛忍忍就过去了,听到身旁的人一句安慰就瞬间完败。后来才明白,怕的不是冷漠怕的是突然的温柔,怕的不是自己吃苦怕的是身边的人为你难过,怕的不是孤独怕的是辜负。有一种落差是,你配不上自己的野心,也辜负了所受的苦难。    相貌是一个女人的外衣,时间久了总会褪色;个性是一个女人的骨头,历经岁月分外清晰。美女那么多,...

随便推点

kali liunx2020.2最简单的安装微信,QQ等windows软件,同样适合,Debian Ubuntu_kali安装微信_weixin_44675759的博客-程序员秘密

kali liunx安装微信,QQ等windows软件1、开启kali的i386支持[email protected]:~# dpkg --add-architecture i386更新一下软件库和软件[email protected]:~# apt update &amp;&amp; apt upgrade2、安装wine并设置默认wine32因为kali默认安装wine64 ,先使用[email protected]:~# apt install wine32安装wine32并在ROOT目录下找到 .bashrc打开并添加以

Pleasant sheep and big big wolf HDU - 3046(最小割)_babing2770的博客-程序员秘密

Pleasant sheep and big big wolfTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3316Accepted Submission(s): 1360Problem Description...

微信支付奇葩问题 system:access_denied_程序邦的博客-程序员秘密

昨天客户向我提到,微信支付在IOS上成功,但在Android上会报system:access_denied错误。反复检查代码,没有问题。而且因为IOS上成功支付,让我百思不得其解,为什么Android上不成功。后来看到一篇文章http://www.okhjp.com/post/9/wechat-pay-system-access-denied/,反应的问题和我一样,但是没有提到解决

高中数学必修四平面向量复习笔记知识点_肖博讲高中数学的博客-程序员秘密

本文作者:vxbomath今天我给大家分享高中数学必修四平面向量复习笔记知识点, 以帮助同学梳理知识。好了,高中数学必修四平面向量复习笔记知识点今天分享就到这里了,需要更多技巧视频可以私信老师每天给大家持续更新文章,大家多多关注。推荐阅读:高中数学平面向量解题技巧:奔驰定理推荐视频:高中数学辅导之高考数学向量难题快速口算的秘密...

Serverless 架构下用 Python 轻松搞定图像分类和预测_Docker_的博客-程序员秘密

前言图像分类是人工智能领域的一个热门话题。通俗解释就是,根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法。它利用计算机对图像进行定量分析,把图像或图像中的每个...

推荐文章

热门文章

相关标签