JAVA基础-接口与抽象类
发布日期:2023-05-18 08:11:35 浏览次数:30 分类:技术文章

本文共 3169 字,大约阅读时间需要 10 分钟。

接口

接口的作用:用于团队开发,确定好功能后,设定接口,通过接口确定属性和方法,将一个整体项目解耦成实现不同功能的接口。

接口的组成:由全局常量和公共的抽象方法所组成。

接口的语法格式:

[public] interface interface_name [extends interface1_name[, interface2_name,…]] {    // 接口体,其中可以包含定义常量和声明方法    [public] [static] [final] type constant_name = value;    // 定义常量    [public] [abstract] returnType method_name(parameter_list);    // 声明方法}

接口的特征:

  • public 修饰的接口,允许任何类使用;没有指定 public 的接口,其访问将局限于所属的包。

  • 接口中声明的方法隐式地声明为public abstract,这种方法是不能有具体代码实现的。特别地,接口中可以创建static和default方法,而且要有具体代码实现,由static修饰的方法可以不用重写,default修饰的方法不能重写。代码如下:

public interface Student {    public static final  String NAME="小红";        public abstract void study() ;    void st1();//不写就默认为抽象方法    static void st2() {};//static方法    default void st3() {};//default方法}
public class ImpStudent implements Student{        @Override    public void study() {        // TODO Auto-generated method stub            }    @Override    public void st1() {        // TODO Auto-generated method stub            }    static void st2() {        System.out.println("我是static方法");    };}
  • 接口中声明的变量隐式地声明为public static final

  • 由static修饰的变量所有对象都会共享,如果修改多次值,各对象都只记录最后一次赋值。而普通的常量一个对象保存一份变量值,各对象修改互不干扰。代码如下:

public class Test {    public static int Const=10;    public static void main(String[] args) {        Test t1=new Test();        t1.Const=20;        Test t2=new Test();        t2.Const=30;        System.out.print("t1:"+t1.Const+","+"t2:"+t2.Const);    }}//运行结果:t1:30,t2:30
  • 由final定义的常量,不能被修改。由final修饰的方法不能被重写,不能被继承

  • 接口没有构造方法,不能被实例化

  • 类可以在继承某个类的同时实现多个接口,继承在前,实现在后。

  • <public> class <class_name> [extends superclass_name] [implements interface1_name[, interface2_name…]]{}

  • 一个接口不能够实现另一个接口,但它可以继承多个其他接口。这里要注意因为该接口继承了父接口所有的抽象方法,那么如果有类实现该接口,该接口以及该接口的父接口所有的抽象方法要全部重写。

  • 例如接口Student继承了ActionListener,MouseListener两个接口,当类ImpStudent实现接口Student时,就不能只重写Student接口内的抽象方法,ActionListener,MouseListener两个接口的抽象方法全都要重写,否则会报错。代码如下:


抽象类

抽象类的作用:和接口类似,用来定义对象的公共行为。如果一个类中不能包含一个具体的对象,这样的类就称为抽象类。

抽象类的语法格式:

class
{
(parameter-iist);}

抽象类的特征:

  • 抽象类和抽象方法都要使用abstract 关键字声明

  • 抽象类中的属性可以被任何修饰符修饰,普通方法的修饰符无限制,抽象方法不能使用private

  • 抽象类中可以包含抽象方法,同时可以有具体方法

  • 抽象类不能实例化,不能使用new创建对象,只能被继承

抽象类的实现:

public abstract class AbstractExample {//普通变量    int count=2;    //私有变量    private static int total=10;    //抽象方法    public abstract void method();    //普通方法    public void method1() {        System.out.println("我是普通方法");    };}

抽象类被继承:

public class Abstractmethod extends AbstractExample{    @Override    public void method() {        System.out.println("我是抽象方法");            }    public static void main(String[] args) {        Abstractmethod abstractMethod=new Abstractmethod();        abstractMethod.count=1;        abstractMethod.method1();        abstractMethod.method();    }    }//运行结果:我是普通方法 我是抽象方法

接口与抽象类的区别:

  • 定义的关键字不同:接口使用关键字 interface 来定义。 抽象类使用关键字 abstract 来定义

  • 子类继承或实现关键字不同:接口使用 implements 关键字定义其具体实现。 抽象类使用 extends 关键字实现继承。

  • 类型扩展不同:抽象类是单继承,而接口是多继承

  • 方法的修饰符:抽象类无限制,只是抽象类中的抽象方法不能被 private 修饰;而接口有限制,接口默认的是 public (stract)修饰

  • 属性的修饰符:抽象类无限制,而接口有限制,接口默认的是 public (static final)修饰

  • 方法实现不同:抽象类中的普通方法必须有实现,抽象方法不能有实现;而接口中普通方法(也就是抽象方法)不能有实现,但 static 和 defualt 方法必须有实现

  • 静态代码块的使用不同:抽象类可以有静态代码块,而接口不能有

转载地址:https://blog.csdn.net/lwxklts/article/details/128925315 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Invalid name="org.apache.dubbo.config.ApplicationConfig#0" contains illegal character, 怎么解决
下一篇:dubbo 没有配置文件,为什么报错Invalid name="org.apache.dubbo.config.ApplicationConfig#0" contains illegal character,

发表评论

最新留言

很好
[***.229.124.182]2024年04月04日 08时34分11秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章