Java中接口的特点及其概述

本文围绕Java中抽象类和接口展开。先介绍接口,包括其概述、特点、实现类及成员特点,还说明了类与接口、接口与接口间的关系。接着对比抽象类和接口在成员、关系、设计理念上的区别,最后给出具体案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:接口概述:

  • 接口就是一种公共的规范标准,只要符合规范标准,大家都可以通过Java中的接口更多的体现在对行为的抽象。

接口的特点:

  • 接口用interface关键字修饰。
public interface 接口名字{}
  • 类和接口之间是实现关系, 用implements关键字表示。
public class 类名 implements 接口名{}
  • 接口不能实例化
    — 那接口如何实例化呢?可以通过多态的方式, 创建其子类对象, 来完成接口的实例化。
    — 多态的形式:具体类多态,抽象类多态,接口多态。
    — 多态的前提:有继承或者实现关系;重写父类所有的方法;有父(类/接口)引用指向(子/实现)类对象。
  • 接口的实现类:
    — 1.要么重写父接口中所有的抽象方法。
    — 2.要么是抽象类。
/**
 * 接口
 */
public interface Jumpping {
    //抽象方法
    public abstract void jump();

}

*****这里接口中的抽象方法可以省略 public 和 abstract两个关键字。****

public class Cat implements Jumpping {

    // 重写父类中的所有抽象方法
    @Override
    public void jump() {
        System.out.println("猫要跳上楼顶............");
    }
    
    //子类成员方法
    public void eat(){
        System.out.println("猫吃鱼.....");
    }
}


/**
 * 测试类
 */
public class TestJumping {
    public static void main(String[] args) {
        //创建对象 测试接口多态
        Jumpping j1 = new Cat();
        j1.jump();  //猫要跳上楼顶............

        //测试子类对象
        Cat c1 = new Cat();
        c1.eat();  //猫吃鱼.....

        //向下转型
        Cat c2 = (Cat)j1;
        c2.eat();  //猫吃鱼.....  了解
    }
}

接口的成员特点:

  • 成员变量:
    — 只能是常量 默认有修饰符:public static final
  • 构造方法:
    — 接口没有构造方法,因为接口主要是对行为进行抽象的,是没有具体存在。一个类如果没有父类,默认继承自Object类
    -成员方法:
    — 只能是抽象方法 默认修饰符:public abstract
//接口类
public interface Study {
    int a = 20;     //这里的变量在接口中  相当于一个静态常量
    final int c = 50;
    static final int d = 50;
    // 新特性 有一个静态方法
    static void method1(){
        System.out.println("我是JDK1.8的新特性: 接口中可以写静态方法");
    }
    //新特性  有一个默认方法
    default void method2() {
        System.out.println("我是JDK1.8的新特性: 接口中可以写默认方法");
    }
    //抽象方法   省略了 public abstract
    void eat();
    void code();
}


//  实现类
public class StudyImpl implements Study {

    @Override
    public void eat() {
        System.out.println("学生要吃东西........");
    }

    @Override
    public void code() {
        System.out.println("吃完东西就好好敲代码..");
    }

}


//测试类
public class TestStudy {
    public static void main(String[] args) {
        //接口多态写法
        Study s = new StudyImpl();
        s.eat();   //学生要吃东西........
        s.code();  //吃完东西就好好敲代码..
    }
}

类和接口之间的关系:

  • 类和类之间的关系: 继承关系,只能单继承,但是可以多层次。
  • 类和接口之间的关系: 实实现关系, 可以单实现, 也可以多实现. 还可以在继承一个类的同时实现多个接口。
  • 接口与接口之间: 继承关系, 可以单继承, 也可以多继承。

抽象类和接口的区别(记忆)

成员区别:

  • 抽象类
    ​ 变量,常量;有构造方法;有抽象方法,也有非抽象方法
  • 接口
    ​ 常量;抽象方法

关系区别:

  • 类与类
    ​ 继承,单继承
  • 类与接口
    ​ 实现,可以单实现,也可以多实现
  • 接口与接口
    ​ 继承,单继承,多继承

设计理念区别

  • 抽象类
    ​ 对类抽象,包括属性、行为
  • 接口
    ​ 对行为抽象,主要是行为

具体案例:

在这里插入图片描述

    // 学习英语接口
    public interface StudyEnglish {
    
        void speakEnglish();
    
    }



public abstract class Person {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public abstract void eat();
}




public abstract class Player extends Person {

    public Player() {
    }

    public Player(String name, int age) {
        super(name, age);
    }


}



public abstract class Coach extends Player {

    public Coach() {
    }

    public Coach(String name, int age) {
        super(name, age);
    }

    public abstract void teach();
}




public class BaskballCoach extends Coach implements StudyEnglish  {

    public BaskballCoach() {
    }

    public BaskballCoach(String name, int age) {
        super(name, age);
    }

    @Override
    public void teach() {
        System.out.println("篮球教练教如何打篮球..");
    }


    @Override
    public void eat() {
        System.out.println("篮球教练吃玉米");
    }

    @Override
    public void speakEnglish() {
        System.out.println("篮球教练学习英语.....");
    }
}




public class BaskballPalyer extends Player implements StudyEnglish {


    @Override
    public void eat() {
        System.out.println("篮球运动员吃牛肉.......");
    }

    @Override
    public void speakEnglish() {
        System.out.println("篮球运动员学习英语....");
    }

}




/**
 * 测试类
 */
public class TestDemo01 {
    public static void main(String[] args) {
        BaskballCoach bbc = new BaskballCoach();
        bbc.setName("波波维奇");
        bbc.setAge(78);
        System.out.println(bbc.getName()+"  "+bbc.getAge());
        bbc.eat();
        bbc.speakEnglish();
        bbc.teach();

        System.out.println("-----------------------------");
        BaskballPalyer bbp = new BaskballPalyer();
        bbp.setName("刘阿福");
        bbp.setAge(23);
        System.out.println(bbp.getName() + " "+bbp.getAge());
        bbp.eat();
        bbp.speakEnglish();

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值