java超基础-接口篇+多态数组(重要)

java超基础-接口篇+多态数组(重要)

在这里插入图片描述

目录侠在此🐱‍🚀

接口

接口可以理解为一些规范性的操作处理

接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,再根据具体情况把这些方法写出来,语法

interface 接口名{

//属性

//方法(1.抽象方法2.默认实现方法(default)3.静态方法)

.jdk8后的接口可以有静态方法,默认方法,也就是说接口可以有方法的具体实现了。

};

package day04;
public class BB extends Template{

    public void job(){
        long sum=0;
        for (int i = 0; i < 100000; i++) {
            sum+=i;
        }
    }
}
interface AsA{
    //这里注意一下就是 接口里面的方法都是加了abstract修饰的 我们没有必要去写的
    void hi();
    default void hello(){
        System.out.println("hello");
    }
    static void bye(){
        System.out.println("bye");
    }
}

class 类名 implements 接口{

自己的属性;

自己的方法;

必须实现的接口的抽象方法

};

summary

1.在jdk7.0以前,接口所有方法都没有方法体,即都是抽象方法。

2.jdk8后的接口可以有静态方法,默认方法,也就是说接口可以有方法的具体实现了。

接口的应用场景

大家可能知道接口是个什么东西了,但是就是不知道如何在什么场景去使用这个接口,那么下面就带大家来具体看一下,什么时候我们才会使用接口

现在项目经理让两个程序员 分别写一个类,分别是连接MySQL和Oracle的数据库,所以说,然后项目经理应该写一个接口 去规范一下,然后具体由程序员去完成这个工作,去实现这个操作流程

package day04;
public interface InterfaceDB {//项目经理写的
    void connect();
    void close();
}

接口的实现

package day04;

import javax.jws.soap.SOAPBinding;

public class MysqlDB implements InterfaceDB{
    @Override
    public void connect() {
        System.out.println("进行与MySQL数据库的链接");
    }

    @Override
    public void close() {
        System.out.println("进行与MySQL数据库的断开");
    }
}

给我的感觉就是接口好似是一种认为 分配给你去做,然后你就去完成这个操作,还没有开发经验,很难去实际的操作这些东西。

接口的使用细节

1.接口不能被实例化(因为本质是抽象的,我们定义接口的目的其实是希望其他的类去实现这个接口)

在这里插入图片描述

2.接口中的所有方法都是public的,接口中的抽象方法是可以不用被abstract

我们这样证明了其实是public的

在这里插入图片描述

3.一个普通类实现该接口,就必须将该接口的所有方法都去实现才行。不能只写一个 可以输入alt+enter进行补全

4.抽象类去实现接口时,可以不实现接口的抽象方法。

在这里插入图片描述

5.一个类可以同时实现多个接口

举例说明

interface A{
}
interface B{
}
class D implements A,B{   
}

6.接口中的属性,只能是final的而且只能是被public static final修饰的 下面举例说明

interface B{
    int a=10;//实际上是 public static final int a=10; 必须在一开始就赋值才行
}

7…接口中属性的访问形式:接口名.属性名

8.一个接口 不能继承其他的类,但是可以继承多个接口,因为接口和类直接是实现关系,不是继承关系!!!!!

9.接口的修饰符,只能是public 和default ,这一点和类的修饰符是一样的,下面举例说明

interface a{
    
}
public interface b{
    
}
接口小练习

看一下下面语句都输出什么

package day04;

public class InterfaceDetails01 {
    public static void main(String[] args) {
        B b = new B();
        System.out.println(B.a);//23 
        System.out.println(b.a);//23 因为这个b已经实现了这个方法所以说是可以进行访问的 并且我们知道这个接口里面的属性是public static final修饰的所以说是可以通过类名进行访问的
        System.out.println(A.a);//23
    }
}



interface A{
    int a=23;
}
class B implements A{
    
}
接口VS继承

我们通过抛出一个问题来进行解决处理,首先,引出一个小故事,

有一个小猴子,天生具有爬树的能力,但是有一天,看到鱼儿可以在水中游泳,什么羡慕,希望自己也可以学会,然后又看到鸟儿在控制飞翔,自己也想拥有这种飞翔的能力,所以小猴子问老猴子,自己如何才能学到这些本领,老猴子呵呵一笑,说你把这些接口都实现了,就行啦。

好了 有些扯,现在进入正言,小猴子踏上了学习之路

package day04;
public class ExtendsVSInterface {
    public static void main(String[] args) {
        littleMonkey littleMonkey = new littleMonkey("悟空");
        littleMonkey.fly();
        littleMonkey.swim();
        littleMonkey.climbing();
    }
}
class Monkey{
    private String name;
    public void climbing(){
        System.out.println(name+"天生就会爬树");
    }
    public Monkey(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}
class littleMonkey extends Monkey implements Fly,Swim{//这个时候小猴子已经继承了父亲的爬树能力
    public littleMonkey(String name) {
        super(name);
    }

    @Override
    public void fly() {
        System.out.println(getName()+"通过后天的努力正在学习飞翔");
    }

    @Override
    public void swim() {
        System.out.println(getName()+"通过后天的努力正在学习水下功夫");
    }
}
interface Fly{
    void fly();
}
interface Swim{
    void swim();
}

在这里插入图片描述

总结一下 由于我们java里面不存在多继承,但是存在一种局限就是,子类的所拥有的能力就会显得很少,就像我们今天的例子一样,父亲不会,游泳和飞翔,但是子类需要学习,那么这个时候接口就显得尤为重要了 当然这也是我个人的观点存在在里面,希望大家可以参考一下我的理解。

小结一下

接口更加灵活于继承,继承是满足 is a 比如说 小猫is动物,而接口只需要满足 like a的关系才行

like a的意思是指 小猫可以像 鸟儿一样飞翔 小猫可以像 鱼儿一样游泳。

接口的价值在于可以设计好各种规范然后让其他类去实现这些方法,显得更加灵活。

继承价值在与解决代码的复用性和可维护性

接口多态的特性

接口多态的特性就是说,

接口类型的变量可以指向实现了该接口的对象实例

package day04;

public class InterfacePolyParameter {
    public static void main(String[] args) {
        IF if1=new Monster();
        IF if2=new Car();//是不是看出来了 就是 接口类型的变量可以指向实现了该接口的对象实例
    }
}
interface IF{
}
class Monster implements IF{
}
class Car implements IF{   
}

继承体现的多态

父类类型的变量 ,可以指向继承了该父类的对象实例

多态数组(接口版本)

这个的意思就是说我刚刚不是说我们的接口类型的变量 可以指向实现这个接口的对象实例 那么我们定义一个接口类型的数组,

把我们这几个实现这个接口的对象放到这个数组里面去,那么我们就可以进行实现操作了。

下面是代码的演示

package day04;
public class InterfacePolyParameter {
    public static void main(String[] args) {
        //多态数组 因为这个数组里面放了 不同的类 接口类型数组
       Usb[] usbs=new Usb[2];
       usbs[0]=new Phone();
       usbs[1]=new Camera();//既可以放不同类的实例
        for (int i=0;i<usbs.length;i++){
            usbs[i].work();//动态绑定
            //1.我们要进行
            if(usbs[i] instanceof Phone){//判断运行类型是什么 是phone我们就调用这个类型
                ((Phone)usbs[i]).call();
            }
        }
    }
}
interface Usb {
    void work();
}
class Phone implements Usb{
public void call(){
    System.out.println("手机可以进行通话功能");
}
    @Override
    public void work() {
        System.out.println("手机工作中");
    }
}
class Camera implements Usb{

    @Override
    public void work() {
        System.out.println("相机工作中");
    }
}
接口的多态传递现象(就是接口直接的继承关系)

在这里插入图片描述

那么我们如何操作使这个代码成立那 我们只需要让IG去继承IF就行

在这里插入图片描述

接口小练习

在这里插入图片描述

要求我们掌握这个 调用属性 会不会调用父类和接口的属性 切记 接口里面的属性默认是Public static final的

多态数组(接口版本)

这个的意思就是说我刚刚不是说我们的接口类型的变量 可以指向实现这个接口的对象实例 那么我们定义一个接口类型的数组,

把我们这几个实现这个接口的对象放到这个数组里面去,那么我们就可以进行实现操作了。

下面是代码的演示

package day04;
public class InterfacePolyParameter {
    public static void main(String[] args) {
        //多态数组 因为这个数组里面放了 不同的类 接口类型数组
       Usb[] usbs=new Usb[2];
       usbs[0]=new Phone();
       usbs[1]=new Camera();//既可以放不同类的实例
        for (int i=0;i<usbs.length;i++){
            usbs[i].work();//动态绑定
            //1.我们要进行
            if(usbs[i] instanceof Phone){//判断运行类型是什么 是phone我们就调用这个类型
                ((Phone)usbs[i]).call();
            }
        }
    }
}
interface Usb {
    void work();
}
class Phone implements Usb{
public void call(){
    System.out.println("手机可以进行通话功能");
}
    @Override
    public void work() {
        System.out.println("手机工作中");
    }
}
class Camera implements Usb{

    @Override
    public void work() {
        System.out.println("相机工作中");
    }
}
接口的多态传递现象(就是接口直接的继承关系)

在这里插入图片描述

那么我们如何操作使这个代码成立那 我们只需要让IG去继承IF就行

在这里插入图片描述

接口小练习

在这里插入图片描述

要求我们掌握这个 调用属性 会不会调用父类和接口的属性 切记 接口里面的属性默认是Public static final的

结语

🆗 本次分享到这里 如果对大家有帮助 希望大家点赞支持 谢谢啦
加油 xdm
在这里插入图片描述

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@桐同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值