Java 接口1

接口

1.接口的概念

  • 接口:就是公共的行为规范标准,在实现时,只要符合规范标准,就可以通用。在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。

  • 比如:电源插座上,可以插电脑、冰箱、电视等所有符合规范的设备

2.接口的特性

2.1语法规则

  • 使用interface关键字来修饰;
  • 接口命名一般以大写字母 I(i) 开头;
  • 接口中的抽象方法默认是public abstract;(public abstract是固定搭配,可以不写)
interface IShape{
     public abstract void draw();
     void draw();//抽象方法     
}

2.2接口的特性

  1. 接口当中的成员变量默认是public static final 的;并且在定义时,必须先进行初始化;
interface IShape{
     /*public int a;
    public int b;*///报错,必须初始化
    public static final int c=3;//2默认是public static final
    int a=4;       
}
  1. 接口中可以定义实现了的方法,要么被default修饰,要么被static修饰;
interface IShape{
    default public void test(){
        System.out.println("这就是一个默认的方法");
    }
    public static void test2(){
        System.out.println();
    }
}
  1. 接口不可以被实例化;
interface IShape{
     public abstract void draw();
}
public class TestDemo {
    //IShape iShape=new IShape() ;报错,不能实例化
}
  1. 类和接口的关系,可以通过implements来完成关系的建立。此时这个类就需要重写接口当中的所有的抽象方法;
interface IShape{
     public abstract void draw();
}
class Cycle implements IShape{
    @Override
    public void draw() {//重写draw方法
        System.out.println("画⭕");
    }
}

  1. default方法是接口的默认方法;也可以在实现类当中重写接口的这个默认方法;(敲击方法名test回车,系统会自动生成重写的方法)
interface IShape{
    default public void test(){
        System.out.println("这就是一个默认的方法");
    }
}
class Cycle implements IShape{//6
    @Override
    public void test() {//重写default方法
        IShape.super.test();
    }
}
  1. 一个类可以实现多个接口,使用逗号隔开。同时所有的接口当中的方法必须重新实现(除非是抽象类不用重写)
package demo3;

interface IA{
    void test1();
}
interface IB{
    void test2();
}
class CA implements IA,IB{//8

    @Override
    public void test1() {

    }

    @Override
    public void test2() {

    }
}
abstract class CA implements IA,IB{//抽象类
   
}

  1. 一个类可以继承一个抽象类/普通类,同时可以实现多个接口。但是,先要继承 然后实现接口,接口的实现放在最后;
package demo3;

interface IA{
    void test1();
}
interface IB{
    void test2();
}
interface IC{
    void test3();
}
abstract class CA implements IA,IB{//8
    public abstract void test();//CA自己的抽象方法
}

class CC extends CA implements IC{//9

    @Override
    public void test1() {

    }

    @Override
    public void test2() {

    }

    @Override
    public void test3() {

    }

    @Override
    public void test() {

    }
}
  1. 当一个接口使用extends拓展了其他的接口,此时当一个类实现了这个接口,需要重写的是所有的接口的方法;
package demo3;

interface IA{
    void test1();
}
interface IB{
    void test2();
}
interface IC{
    void test3();
}

//ID这个接口,扩展了IA,IB,IC的功能
interface ID extends IA,IB,IC{//10
    void test4();
}
class CID implements ID{//10

    @Override
    public void test1() {

    }

    @Override
    public void test2() {

    }

    @Override
    public void test3() {

    }

    @Override
    public void test4() {

    }
}

3.实现多个接口

Java中一个类只能继承一个类,不能实现多继承,但是一个类可以实现多个接口。

下列代码中,跑和游泳方法不能放在父类中,因为不是所有的动物都会跑或者都会游泳(鱼不会跑,但是狗和猫可以跑,狗和鱼都能游泳);

package demo1;

import com.sun.xml.internal.ws.api.ha.StickyFeature;

class Animal{
    public String name;
    public Animal(String name){//构造方法
        this.name=name;
    }
}

class Dog extends Animal{

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

    public void Running(){
        System.out.println(this.name+"正在跑");
    }

    public void swimming(){
        System.out.println(this.name+"正在游泳");
    }
}

class Cat extends Animal{

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

    public void Running(){
        System.out.println(this.name+"正在跑");
    }
}

class Fish extends Animal{
    public Fish(String name){
        super(name);
    }

    public void swimming(){
        System.out.println(this.name+"正在游泳");
    }
}

public class testDemo {
    public static void main(String[] args) {

    }
}

那么如何来实现多个接口,改写上述代码?

  • 添加一组接口,分别表示“跑”和“游泳”;
interface IRunning{
    void Running();
}
interface ISwimming{
    void Swimming();
}
  • 狗类继承动物类,再实现“跑”和“游泳”两个接口;其他两个类似。
  • 注意:当一个类实现多个接口的时候,每个接口中的抽象方法都要实现。
class Dog extends Animal implements IRunning,ISwimming{

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

    @Override
    public void Running(){
        System.out.println(this.name+"正在跑");
    }
    @Override
    public void Swimming(){
        System.out.println(this.name+"正在游泳");
    }

}

class Cat extends Animal implements IRunning{

    public Cat(String name) {
        super(name);
    }
    @Override
    public void Running(){
        System.out.println(this.name+"正在跑");
    }
}

class Fish extends Animal implements ISwimming{
    public Fish(String name){
        super(name);
    }
    @Override
    public void Swimming(){
        System.out.println(this.name+"正在游泳");
    }
}
  • 如何来打印, 实现一个walk方法。(下列代码中注释掉的也可以用来打印)
public class testDemo {
    //只要实现了该接口的类,都可以传入
    public static void walk(IRunning iRunning){
        iRunning.Running();
    }
    public static void main(String[] args) {
       /* walk(new Dog("豆豆"));
        walk(new Cat("小小"));*/
        Dog dog=new Dog("豆豆");
        walk(dog);
        Cat cat=new Cat("小小");
        walk(cat);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值