java接口的一些理解(未完待续)

接口有2种:①是程序层面的接口     ②java中用来解决java不能多继承的问题,还有接口可以做到:不用修改实例名和调用,只修改实现类,提到代码复用。

一、接口测试的理解:

首先别人是写的网络接口归我们去通过http请求获取,然后我们在上传请求头时是依据后台写的验证条件决定我们需要不需要上传请求头,但是一般情况下:content-type(请求文件格式)是需要写在headers中的,另外就是token认证(看后台是否需要你登录情况下才能操作,确定是否上传该请求头)。

二、别人写的网络接口供别人调用(网络接口形式):

计算机语言分类有很多,如C、C++、C#、Java、Php、Python等等,她们有各自的特性及擅长的领域,但她们各自又不是全能的。在一个稍微大型一点的项目都会用到多种语言共同完成,那么这些编程语言如何进行通信呢。什么意思呢,就是比如说我Java写的一个方法,其他编程语言要怎么去调用呢?这就是本文要探讨的问题了。

一般来说,方法层面的编程语言通信用的是网络接口形式,只暴露出形参和结果供别人调用。接口一般分为接口定义者和接口调用者,定义者可以规定接收参数的类型及返回形式,而接口调用者则只能完全按照接口定义者规定的参数进行访问。就叫是我们所说的webService(网络服务)。

以前的做法是利用XML作接口格式定义,然后通过Http做通讯和请求,如大名鼎鼎的SOAP,其实现在也是的,只不过现在流行RestFul风格的Rest接口形式,但用的还是XML+HTTP,那这两者有啥区别呢?最大的区别就是SOAP返回的主要是XML格式,有时还需要附带一些辅助文件,而Rest则还可以返回JSON类型的字符串,减少了很多繁乱的XML标签。本文就以Java为例,用她写一个接口,并让其他人去调用,以此来简单展示接口调用是怎么样一个过程。

链接1:

https://blog.csdn.net/kevin_gu6/article/details/82120408?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%88%AB%E4%BA%BA%E5%86%99%E7%9A%84java%E6%8E%A5%E5%8F%A3&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-82120408

链接2:

https://blog.csdn.net/weixin_30535843/article/details/98812359?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159448251319724845022707%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159448251319724845022707&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v3~pc_rank_v2-6-98812359.first_rank_ecpm_v3_pc_rank_v2&utm_term=%E5%88%AB%E4%BA%BA%E5%86%99%E7%9A%84java%E6%8E%A5%E5%8F%A3

三、java后台开发中遇到的接口是怎么回事:

java工作中经常说写一个接口,提供一个接口,这个接口是怎么回事?接口不是没有实现的吗?不是应该说写一个方法吗?每次听见写一个接口总感觉很变扭?

回答1:别人要你提供接口肯定是这个接口的实现类也是由你去写呀,只要接口规范,别人可以调用你的写的实现类,也可以调用别人写的实现类。

回答2

题主是没体验到接口的快感,,,

有个例子,,
接口是规范,是规矩,,按规矩办事,就能够统一处理,更方便。

 interface TV{//电视接口,具有看电视的功能
    void watchTV();
}
class HairTV implements TV{//海尔电视是电视,,那么他就必须具有看电视的功能。
    public void watchTV(){
        System.out.println("看电视,用的海尔电视");
    }
}

class Main{//我有个类需要加入看电视的功能
                TV tv =new Hair();//注意,这里,,类型是TV,,创建的实例是hair电视
            。。。。。。使用tv实例的一大串代码。
}


假如需求变更了,,,我需要换成乐视电视,,,怎么换?
【不用接口的话】,,,所有调用都得换,,
【用了接口,,只需还一个地方】

 class LeshiTV implements TV{//Leshi电视是电视,,那么他就必须具有看电视的功能。
    public void watchTV(){
        System.out.println("看电视,用的Leshi电视");
    }
}

class Main{//我有个类需要加入看电视的功能
                TV tv =new LeshiTV();//注意,这里,,类型是TV,,创建的实例是LeshiTV
            。。。。。。只需要修改上面这个创建的实例即可,,调用都不用改,很方便吧,,(学了spring的话,,上面这个实例都不用改了,)
}

这也是面向对象设计原则之一,,,【依赖倒置原则】

回答3:接口既可以是指java语法上的接口,也可以是指程序层面的调用规范(这里的接口是指合作开发,或者系统之间的调用,只要按照你写的规范把请求返回的参数获取到,怎么利用就是别人的事情了,就压根不需要考虑你程序内部怎么实现的了,反正调了你的接口,你就得给我所有的你本身具有的返回值)。后者和语言上的接口没有关系

四:接口实现类似多继承

题目:
通过动物游泳奔跑飞行来模拟实现多个接口,因为这种情况下,我们需要让一个类同时继承多个父类,这件事情在有些编程语言中可以通过多继承的方式来实现,但是JAVA中只支持单继承,一个类只能继承一个父类,但是可以同时实现多个接口,这样也就可以达到类似于多继承的效果

(1)


public class Animal {
    protected String name;

    public Animal(String name) {
        this.name = name;
    }
}

(2)


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

    @Override
    public void swim() {
        System.out.println(this.name + "正在用尾巴游泳");
    }
}

(3)


public class Frog extends Animal implements IRunning, ISwimming {
    public Frog(String name) {
        super(name);
    }

    @Override
    public void run() {
        System.out.println(this.name + "正在往前跳");
    }

    @Override
    public void swim() {
        System.out.println(this.name + "正在蹬腿游泳");
    }
}

(4)


public class Cat extends Animal implements IRunning{
    public Cat(String name) {
        super(name);
    }
    @Override
    public void run() {
        System.out.println(this.name + " 正在用四条腿跑步");
    }
}

(5)


public class Duck extends Animal implements ISwimming, IRunning, IFlying {

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

    @Override
    public void fly() {
        System.out.println(this.name + "正在用翅膀飞");
    }

    @Override
    public void run() {
        System.out.println(this.name + "正在用两条腿跑");
    }

    @Override
    public void swim() {
        System.out.println(this.name + "正漂在水上");
    }
}

(6)


public interface IFlying {
    void fly();
}

public interface ISwimming {
    void swim();
}

public interface IRunning {
    void run();
}

(7)


public class Test {
    public static void main(String[] args) {
        Cat cat = new Cat("小猫");
        walk(cat);
        Duck duck = new Duck("小鸭");
        walk(duck);
        Fish fish = new Fish("小鱼");
        swim(fish);
        Frog frog = new Frog("小青蛙");
        walk(frog);
        swim(frog);
    }

    public static void walk(IRunning running) {
        System.out.println("我带着伙伴去散步");
        running.run();
    }

    public static void fly(IFlying flying) {
        System.out.println("我看见伙伴在飞");
        flying.fly();
    }

    public static void swim(ISwimming swimming) {
        System.out.println("我带着伙伴游泳");
        swimming.swim();
    }
}
Java中,泛型是一种强类型机制,它可以让你在编译时检查类型错误,从而提高代码的安全性和可读性。在使用泛型时,我们经常会遇到父类和子类的泛型转换问题。 首先,我们需要明确一点:子类泛型不能转换成父类泛型。这是因为Java中的泛型是不协变的。例如,如果有一个类A和它的子类B,那么List<A>和List<B>之间是不存在继承关系的。 下面我们来看一个例子: ```java public class Animal { //... } public class Dog extends Animal { //... } public class Test { public static void main(String[] args) { List<Animal> list1 = new ArrayList<>(); List<Dog> list2 = new ArrayList<>(); list1 = list2; // 编译错误 } } ``` 在这个例子中,我们定义了Animal类和它的子类Dog。然后我们定义了两个List,分别是List<Animal>和List<Dog>。如果将List<Dog>赋值给List<Animal>,会出现编译错误。这是因为List<Animal>和List<Dog>之间不存在继承关系。 那么,如果我们想要让子类泛型转换成父类泛型,应该怎么办呢?这时我们可以使用通配符来解决问题。通配符可以表示任意类型,包括父类和子类。例如,我们可以将List<Dog>赋值给List<? extends Animal>,这样就可以实现子类泛型转换成父类泛型了。 下面我们来看一个使用通配符的例子: ```java public class Animal { //... } public class Dog extends Animal { //... } public class Test { public static void main(String[] args) { List<Animal> list1 = new ArrayList<>(); List<Dog> list2 = new ArrayList<>(); list1 = list2; // 编译错误 List<? extends Animal> list3 = new ArrayList<>(); list3 = list2; // 正确 } } ``` 在这个例子中,我们定义了List<? extends Animal>来表示任意继承自Animal的类型。然后我们将List<Dog>赋值给List<? extends Animal>,这样就可以实现子类泛型转换成父类泛型了。 总结一下,Java中的泛型是不协变的,子类泛型不能转换成父类泛型。如果需要实现子类泛型转换成父类泛型,可以使用通配符来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值