JAVA基础-接口与抽象类

接口

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

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

接口的语法格式:

[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两个接口的抽象方法全都要重写,否则会报错。代码如下:


抽象类

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

抽象类的语法格式:

<abstract>class<class_name> {
    <abstract><type><method_name>(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 方法必须有实现

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值