接口

接口

一、接口的概述及其特点

1、接口的概述

​ 接口类似于类,但是与类相比,有两个原则必须遵守,这两个原则也是区别接口和类的关键:

A.接口中的成员只能是公有、静态、常变量,即,必须(编译软件自动)拥有publicstaticfinal联合属性关键字;

B.接口中的方法只能是公有、抽象方法,即,必须(编译软件自动)拥有publicabstract联合属性关键字。

​ **C.**代码:下面两段代码本质上是一样的

public interface Test1 {
    int data = 20;//编译系统自动拥有
    void show();
}
public interface Test2 {
    public static final int data = 20;
    public abstract void show();
}

二、接口的特点

​ A:接口用关键字interface表示 格式: interface 接口名 {}

​ B:类实现接口用implements表示 格式: class 类名 implements 接口名 {}

​ C:接口不能实例化

​ 按照多态的方式来实例化。

​ D:接口的子类:实现接口的类,必须实现接口所规定的的抽象方法!否则,该类就是抽象类!

​ a:可以是抽象类。但是意义不大。

​ b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)

二、接口的成员特点

​ A:接口成员特点

​ a:成员变量:只能是常量,并且是静态的。

​ 默认修饰符:public static final

​ 建议:自己手动给出。

​ b:构造方法:接口没有构造方法。

​ c:成员方法:只能是抽象方法。

​ 默认修饰符:public abstract

三、类与类,类与接口,接口与接口的关系

1.类与类:

​ 继承关系,只能单继承(一个子类只能有一个父类,父类可以被多个子类继承),可以多层继承。

2.类与接口:

​ 实现关系,可以单实现,也可以多实现。

​ 并且还可以在继承一个类的同时实现多个接口。

3.接口与接口:

​ 继承关系,可以单继承,也可以多继承。

四、抽象类和接口的区别

​ A:成员区别

​ a:抽象类:

​ 成员变量:可以是变量,也可以是常量

​ 构造方法:有

​ 成员方法:可以是抽象,也可以是非抽象

​ b:接口:

​ 成员变量:只可以是常量

​ 成员方法:只可以是抽象

​ B:关系区别

​ a:类与类

​ 继承,单继承

​ b:类与接口

​ 实现,单实现,多实现

​ c:接口与接口

​ 继承,单继承,多继承

​ C:设计理念区别

​ 抽象类 被继承体现的是:”is a”的关系。 抽象类中定义的是该继承体系的共性功能。

​ 接口 被实现体现的是:”like a”的关系。 接口中定义的是该继承体系的扩展功能。

五.例子

public abstract class Animal {
    public String name;
    public int age;
    
    public abstract void eat();
    public abstract void sleep();
}
public interface JumpInterface {
    void jump();
}
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 Jiafei extends Cat implements JumpInteface {
    @Override
    public void eat() {
        System.out.println("加菲猫吃猫粮");
    }

    @Override
    public void sleep() {
        System.out.println("加菲猫想睡就睡");
    }


    @Override
    public void jump() {
        System.out.println("加菲猫学会了跳高");
    }
}
public class Fatorange extends Cat{
    @Override
    public void eat() {
        System.out.println("猫吃小鱼干");
    }

    @Override
    public void sleep() {
        System.out.println("胖橘白天睡觉");
    }

    public void catchMouse(){
        System.out.println("胖橘抓老鼠");
    }
}
public class Wangcai extends Dog {

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

    @Override
    public void sleep() {
        System.out.println("旺财天天睡觉");
    }
    public void lookDoor(){
        System.out.println("旺财看门");
    }
}
import org.westos.demo.JumpInteface;


public class Bruse extends Dog implements JumpInteface {
    @Override
    public void eat() {
        System.out.println("布鲁斯吃牛排");
    }

    @Override
    public void sleep() {
        System.out.println("布鲁斯睡沙发");
    }

    public void watchTV(){
        System.out.println("看电视");
    }

    @Override
    public void jump() {
        System.out.println("布鲁斯学会了跳高");
    }
}
public class MyTest {
    public static void main(String[] args) {
       /* A:
        案例演示
        动物类:姓名,年龄,吃饭,睡觉。
        动物培训接口:跳高
        猫继承动物类
       	狗继承动物类
        部分猫继承猫类并实现跳高接口
        部分狗继承狗类并实现跳高接口*/
        Wangcai  wc = new Wangcai();
        Animal an = wc;
        an.name = "旺财";
        an.age = 20;
        System.out.println(an.name);
        System.out.println(an.age);
        an.sleep();
        an.eat();
        ((Wangcai) an).lookDoor();
        
        Bruse bls = new Bruse();

        an=bls;
        an.name = "布鲁斯";
        an.age = 58;
        System.out.println(an.name);
        System.out.println(an.age);
        an.eat();
        an.sleep();
        JumpInteface jumpInteface= bls;
        jumpInteface.jump();
        
        Fatorange fo = new Fatorange();
        Animal an = fo;
        an.name = "胖橘";
        an.age = 23;
        System.out.println(an.name);
        System.out.println(an.age);
        an.sleep();
        an.eat();
        ((Fatorange) an).catchMouse();

        Jiafei  jf = new Jiafei();

        an=jf;
        an.name = "加菲";
        an.age = 33;
        System.out.println(an.name);
        System.out.println(an.age);
        an.eat();
        an.sleep();
        JumpInteface jumpInteface = jf;
        jumpInteface.jump();
    }
}

	以上的例子,不仅运用了类的继承、方法的重写和接口的继承,
	还使用了如何用接口来实例化(多态实例化)。
	希望大家把以上代码亲自敲一遍,深刻理解接口中的jump()方法,
	将此方法与父类中的eat()和sleep()两个方法进行对比,
	找到接口与类的不同点与相似点!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值