接口

接口主要用于定义扩展功能,区别于抽象类,它不包含具体实现。接口中只能有抽象方法,成员变量为公共静态常量。类可以实现多个接口,并重写其所有抽象方法。在Java中,接口允许多继承,JDK1.8后接口还能包含默认方法。

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

什么是接口

接口 用来定义一些扩展功能的;
当一个事物,他本身所具备的属性和功能,我们会定义在这个事物当中,这非常合理
比如这个猫类,我们给他定义了,吃饭,睡觉,抓老鼠的功能,很合理,但是你给猫类中定义一个做算术的功能合理吗?
那么这个做算术的功能,它属于哪个事物,扩展出的功能,我们定义在猫这个事物当中,肯定不合理,但是,部分猫,他想要具备这个功能,我们可以把这个功能,定义到一个接口中,将来,那些事物。想要具备这个做算术的功能,可以实现这个接口

定义接口的语法 interface 接口名

接口和抽象类的区别

抽象类

他是将事物的本身所具备的共性功能向上抽取,但是不给出功能的具体实现,由子类根据自身差异,去做实现

接口

是用来定义一些额外的扩展功能,这些功能也是抽象的。将来那些事物,想要具备这些额外功能,可以去实现这个接口,去重写这个接口中,所定义的所有额外功能

抽象类中,即可以定义抽象方法,也可以定义非抽象方法,接口中只能是抽象方法
抽象类中有构造方法,接口中没有构造方法
抽象类中,即可以定义成员变量,也可以定义常量,接口中全是,公共的静态常量

抽象类:父类,将多个子类的共性功能,向上抽取出来,他并不知道,子类对共性功能的具体实现,所以父类,没有必要给出共性功能的具体实现,只需要给出方法的声明即可,也就是将此方法抽象出来,一旦一个类中有了一个抽象方法,此类必须定义为抽象类
接口:用来定义一些扩展功能,也可以用来定义一些规则,那哪个事物,需要具备这些额外功能,可以实现这个接口
接口和抽象类的区别?
类跟类的关系:继承关系,单继承
类跟接口的关系:实现关系 可以实现多个接口,而且一个类,在继承另一类时,还可以实现多个接口
接口跟接口的关系:继承关系,可以继承多个接口

接口的一些注意事项

接口中的方法,全部是抽象方法,没有非抽象方法;
接口中没有构造方法
接口中的成员变量,都是公共的静态常量
前面有默认修饰符 public static final 可省略不写
接口中的方法都是抽象方法 方法前面有默认修饰符 public abstract 可以省略不写
一个类,可以实现多个接口,实现多个接口,必须重写多个接口中的所有抽象方法
接口跟接口 可以是单继承,也可以是多继承。
JDK1.8之后,接口中可以定义默认方法( default 修饰的方法),可以给出方法的具体实现

案例演示

public class MyTest {
public static void main(String[] args) {
    //A:

    //动物类:姓名,年龄,吃饭,睡觉。
    //动物培训接口:跳高
    //        猫继承动物类
    //狗继承动物类
    //        部分猫继承猫类并实现跳高接口
    //部分狗继承狗类并实现跳高接口
    //
    //通过抽象类测试基本功能。
    //通过接口测试扩展功能。
    //只测试猫,狗的测试留给学生自己练习
    Animal an = new TomCat();
    an.name = "汤姆";
    an.age = 3;
    System.out.println(an.name + "===" + an.age);
    an.eat();
    an.sleep();

    KittyCat kittyCat = new KittyCat();
    an = kittyCat;
    an.name = "kitty";
    an.age = 4;
    an.eat();
    an.sleep();
    JumpInterface jumpInterface = kittyCat;
    jumpInterface.jump();
}

}

public interface JumpInterface {
public abstract void jump();
}

public abstract class Animal {
public String name;
public int age;
public abstract void eat();
public abstract void sleep();
}


public class Cat extends Animal {
@Override
public void eat() {
    System.out.println("吃鱼");
}

@Override
public void sleep() {
    System.out.println("猫白天睡觉");
}
}
public class Dog extends Animal{

@Override
public void eat() {
    System.out.println("狗吃骨头");
}

@Override
public void sleep() {
    System.out.println("狗睡觉");
}
}

public class GaoFeiDog extends Dog implements JumpInterface{
@Override
public void eat() {
    System.out.println("高菲狗,爱吃狗粮");
}


@Override
public void jump() {
    System.out.println("高菲狗学会了跳高");
}
}
public class KittyCat extends Cat implements JumpInterface{
@Override
public void eat() {
    System.out.println("hello kitty猫喜欢吃奶油");
}

@Override
public void sleep() {
    System.out.println("kitty 猫不喜欢睡觉");
}

@Override
public void jump() {
    System.out.println("kitty猫 经过自己的学习 学会了跳高这个功能");
}
}



public class TomCat extends Cat{

@Override
public void eat() {
    System.out.println("tom猫喜欢吃猫粮");
}

@Override
public void sleep() {
    System.out.println("tom猫喜欢晚上睡觉");
}
}



public class WangCaiDog extends Dog{
@Override
public void eat() {
    System.out.println("旺财喜欢吃素");
}

@Override
public void sleep() {
    System.out.println("旺财整天睡觉");
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值