栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java基础[接口]

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java基础[接口]

         接口作用:将两个不同的东西连接起来,让他们共同去工作!

        具体类:定义某一具体的事物;

        抽象类:定义某一类不同种的事物;

        接口:定义不同类型的不同种事物,但是却有共同的行为,注重事物的行为,而不是事物的种类。接口不是类,是一个特殊的存在。接口和类是并列的关系。在接口中的方法,需要定义为抽象公共方法,属性需要定义为全局常量(public static final)【基本不用】,接口是抽象的极致。在抽象类中可以直接定义方法:返回值 + 方法名即可。接口没有构造方法。

package com.hike.javase.interfacetest;

public interface Flayer {

    //抽象类中的方法都为全局常量 public static finall
    int num = 10;

    //public abstract void takeOff();
    void takeOff();

    public void fly();

    void land();
}

package com.hike.javase.interfacetest;


public class Plane implements Flayer {
    public void takeOff(){
        System.out.println("飞机起飞了");
    }

    public void fly(){
        System.out.println("飞机在天空中飞");
    }

    public void land(){
        System.out.println("飞机着陆了");
    }

    public void addOil(){
        System.out.println("飞机要加油");
    }
}

package com.hike.javase.interfacetest;


public class FlayerTest {
    public static void main(String[] args) {

        Plane plane = new Plane();  //本态调用

        plane.takeOff();
        plane.fly();
        plane.land();
        plane.addOil();//类中私有方法,不实用多态可以调用

        Flayer flayer = new Plane(); //多态调用:子类对象可以看做是父类使用
        flayer.takeOff();
        flayer.fly();
        flayer.land();
       // flayer.addOil(); 多态不可以调用类的私有方法
    }
}

        练习:定义一个USB接口,定义三个方法,连接,工作,断开,在子类中实现它们,并完成测试。

package com.hike.javase.interfacetest;

public interface USB {

    void connect();

    void work();

    void disconnect();
}

package com.hike.javase.interfacetest;

public class Udisk implements USB{
    @Override
    public void connect() {
        System.out.println("USB正在连接");
    }

    @Override
    public void work() {
        System.out.println("USB正在工作");
    }

    @Override
    public void disconnect() {
        System.out.println("USB正在断开");
    }
}

package com.hike.javase.interfacetest;

public class USBTest {
    public static void main(String[] args) {
        Udisk udisk = new Udisk();
        udisk.connect();
        udisk.work();
        udisk.disconnect();

        USB usb = new Udisk();
        usb.connect();
        usb.work();
        usb.disconnect();
    }
}

        抽象类可以包含抽象方法,所以实现接口时可以对其抽象方法不予实现。

        子类可以同时继承父类并实现接口。public class Bird extends Pet implements Flayer{}。无形中子类同时间接有两个父类,间接实现了多继承。

        java中不能多继承的原因:如果多个父类中有相同的test()方法,那么会同时继承这三个test()方法,当调用test()时,会出现混乱,所以java使用了接口来弥补这个缺点,在接口中的方法是没有方法体的,不会造成同名方法的混乱,所以接口可以实现多继承。子类可以同时实现多个接口,只有在子类中重写接口中的抽象方法,子类才能够使用。

        练习:编写抽象类Decive,mouse类,测试类,实现USB接口,在测试类中完成本态,多态的调用。

package com.hike.javase.interfacetest;

public abstract class Decive {

    private static int no = 1;

    private final int ID;
    private String name;

    {
        ID = no++;
    }

    public Decive(){

    }

    public Decive(String name){
        super();
        this.name = name;
    }

    public int getID() {
        return ID;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "Decive{" +
                "ID=" + ID +
                ", name='" + name + ''' +
                '}';
    }

    public abstract void startup();

    public abstract void shutdown();


}


package com.hike.javase.interfacetest;

public class Mouse extends Decive implements USB {

    public Mouse() {
    }

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

    @Override
    public void startup() {
        System.out.println("鼠标启动了");
    }

    @Override
    public void shutdown() {
        System.out.println("鼠标关闭了");
    }

    @Override
    public void connect() {
        System.out.println("鼠标连接了");
    }

    @Override
    public void work() {
        System.out.println("鼠标工作了");
    }

    @Override
    public void disconnect() {
        System.out.println("鼠标断开了");
    }
}


package com.hike.javase.interfacetest;

import java.lang.management.MemoryUsage;

public class MouseTest {
    public static void main(String[] args) {
        Mouse mouse = new Mouse("华为"); //本态调用
        mouse.connect();
        mouse.startup();
        mouse.work();
        mouse.shutdown();
        mouse.disconnect();
        mouse.toString();

        USB usb = new Mouse("华为");
        usb.connect();
        usb.work();
        usb.disconnect();

        //Decive device = (Decive)usb;
        Decive decive = new Mouse("华为");
        decive.startup();
        decive.shutdown();
    }
}

        接口表现的是一种能力,表明事物可以做到什么。可以飞行的,可以奔跑的等等,在词性上看,是一个形容词。

        接口也可以继承另一个接口,使用extends关键字。接口只能继承接口,不能继承类,并且支持多继承。在子类中实现多个父类中的同名抽象方法,意思就是将所有接口中的同名方法全部重写,并不会引起混乱。

package com.hike.javase.interfacetest;

interface A{
    void test();
}

interface B{
    void test();
}

interface C{
    void test();
}

interface D extends A,B,C{
    void test();
}

class E implements D{
    public void test(){
        System.out.println("E test()");
    }
}

public class ExtendsTest {
    public static void main(String[] args) {
        B b = new E();
        b.test();
    }
}

  问题:接口中的属性是全局常量,当接口和父类中同时有一个同名属性,当子类继承父类并实现接口,当调用这个同名属性时会引起歧义。

接口规范的目的是越多的子类实现越好。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/445516.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号