Java接口

一、什么是接口

        接口就是用 interface 关键字创建的java元素,他的目的就是为不同种类的事物提供功能,不给具体实现,让子类根据自身的实际情况实现。

二、为什么用接口

        1.给不同种类事物提供方法,不具体实现,让子类根据自身实际去实现

        2.一个java类只能继承一个父类【单继承】,接口可以实现多个,可以克服单继承带来的问题

三、怎么实现接口

        通过 implements 关键字实现一个或多个接口,如果是多个接口,则用“,”隔开

        例:public class 类名 implements 接口名称1,接口名称2...... { }

                public class Student implements People{ }

四、接口中有哪些元素

        1.接口中的变量都是用 public static final 修饰的,public static final 可以省略

        2.接口中的抽象方法是使用 public abstract 修饰的抽象方法,public abstract 可以省略

        3.接口中可以有静态方法

五、接口的具体用法

        1.接口中可以有抽象方法,也可以一个都没有

        2.当一个普通的java类实现接口,就需要实现接口提供的所有抽象方法,也可以将该普通类改为抽象类

        3.抽象类也可以实现接口,不需要重写抽象方法(普通类必须重写,或改为抽象类)

        4.接口可以继承接口,继承父接口中的全部元素 ------- 因为接口中的元素都是用public修饰符修饰的,所以在任何地方都可以使用,继而将继承父接口中的全部元素

        5.接口不能通过 new 的方式创建对象,如果要调用,可以通过这个接口的子类来创建【接口回调对象】

        6.java类中的方法参数为接口类型时,可以传递接口回调对象,也可以是接口的子类对象

六、接口回调对象

        接口回调对象和上转型对象类似

        上转型对象 -------- 子类对象赋值给父类变量

        接口回调对象 ------ 接口的子类对象赋值给接口变量

        基本特征:接口回调对象不能访问使用子类自己定义的变量和方法,只能访问接口提供的变量和方法,当访问接口中的抽象方法时,实际上访问的是被子类重写的抽象方法

package com.code.test1;
public interface MyInterface {
    //抽象方法
    //接口中的抽象方法都是使用public abstract修饰的抽象方法,
    //public abstract可以省略
    //public abstract void abstractMethod1();
    //public  void abstractMethod2();
    void abstractMethod3();
}

package com.code.test1;

public  class SunClass implements MyInterface{
	@Override
	public void abstractMethod3() {
		System.out.println("实现重写接口的抽象方法");
	}
	public  void  test1(){
		System.out.println("SunClass子类自己的实例方法");
	}
}

//接口回调对象---接口的子类对象赋值给接口变量
MyInterface my1=new SunClass();
//接口回调对象不能访问使用子类自己定义的变量和方法,只能访问接口提供的变量和方法,
//当访问接口中的抽象方法时,实际上访问的是被子类重写的抽象方法
//my1.test1(); //错误
//如果需要接口回调对象访问子类自己定义的变量和方法,
//那么需要将接口回调对象强制类型转换成子类对象
SunClass sc1=(SunClass)my1;
sc1.test1();
//my1.abstractMethod3();

七、使用接口,做一个卖水果小实例

package com.homework.test2;
//定义一个接口,在接口中定义一个抽象类,提供吃的功能
public interface Fruit {
    public abstract void eat();
}
package com.homework.test2;
//Apple类实现Fruit接口的具体功能
public class Apple implements Fruit {
    @Override
    public void eat() {
        System.out.println("吃苹果,先削皮\n");
    }
}
package com.homework.test2;
//定义一个WaterMelon类,实现Fruit接口的具体功能
public class WaterMelon implements Fruit {
    @Override
    public void eat() {
        System.out.println("吃西瓜,先切开\n");
    }
}
package com.homework.test2;

import java.util.Scanner;
import java.util.ServiceConfigurationError;

//创建主函数,编写逻辑
public class TestMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while(true){
            System.out.println("请问想吃什么水果?我们有苹果和西瓜,请选择:");
            String name = scanner.next();
            Fruit fruit = null;
            if ("苹果".equals(name)){
                fruit = new Apple();
            }else if ("西瓜".equals(name)){
                fruit = new WaterMelon();
            }else {
                System.out.println("抱歉,我们没有这种水果!!!");
                break;
            }
            fruit.eat();
        }
    }
}

八、交通计费小功能,改造为接口方式

package com.homework.test3;
//定义交通工具接口,提供计费功能
public interface Transportation {
    public abstract void charging(float distance);
}
package com.homework.test3;

import java.util.Scanner;

public class Bus implements Transportation{
    @Override
    public void charging(float distance) {
        Scanner scanner_distance = new Scanner(System.in);
        while(true) {
            //公里数小于0,提示输入不正确,大于0 ,计算费用
            if (distance < 0) {
                System.out.println("距离数据错误,无法计算,请重新输入距离");
                distance = scanner_distance.nextFloat();
            } else {
                System.out.println("公交乘坐费用为:每人1元");
                break;
            }
        }
    }
}
package com.homework.test3;

import java.util.Scanner;

public class Taxi implements Transportation {
    //定义出租车的初始费用
    public float start_money = 8;
    //定义总费用
    public float sum = 0;
    @Override
    //定义出租车具体收费标准,初始费用8元,超过10公里,每公里1.25
    public void charging(float distance) {
        Scanner scanner_distance = new Scanner(System.in);
        while(true){
            if(distance<0){
                System.out.println("距离数据错误,无法计算,请重新输入距离");
                distance = scanner_distance.nextFloat();
            }else if(distance>0 && distance<=10){
                System.out.println("您本次乘坐需花费:"+start_money+"元");
                break;
            }else{
                //System.out.println(distance);
                sum = start_money+distance*1.25f;
                System.out.println("您这次乘坐的总费用为:"+sum+"元");
                break;
            }
        }
    }
}
package com.homework.test3;

import java.util.Scanner;

public class VipTaxi implements Transportation {
    //定义专车的初始费用
    public float start_money = 30;
    //定义总费用
    public float sum = 0;
    @Override
    //定义专车具体收费标准,初始费用30元,超过15公里,每公里2.5
    public void charging(float distance) {
        Scanner scanner_distance = new Scanner(System.in);
        while(true){
            if(distance<0){
                System.out.println("距离数据错误,无法计算,请重新输入距离");
                distance = scanner_distance.nextFloat();
            }else if(distance>0 && distance<=15){
                System.out.println("您本次乘坐需花费:"+start_money+"元");
                break;
            }else{
                sum = start_money+distance*2.5f;
                System.out.println("您这次乘坐的总费用为:"+sum+"元");
                break;
            }
        }
    }
}
package com.homework.test3;
//主程序
import java.util.Scanner;

public class TestMain {
    public static void main(String[] args) {
        //何时退出
        boolean exit = true;
        //创建scanner_travel_mode键盘输入对象,录取乘坐方式
        Scanner scanner_travel_mode =new Scanner(System.in);
        //创建scanner_distance键盘输入对象,录取公里数
        Scanner scanner_distance = new Scanner(System.in);
        while (true){
            System.out.println("-------------------------欢迎选择乘坐方式-----------------------");
            System.out.println("请输入出租or公交or专车or退出,我们将根据您的选择,为您提供服务");
            //将录入的乘坐方式保存在travel_mode变量里
            String travel_mode = scanner_travel_mode.next();
            //为了保存Transportation接口回调对象
            Transportation transportation = null;
            //判断输入的内容方式是哪种
            while (true){
                //输入已有方式,跳出循环,采集公里数,否则重新输入
                if("出租".equals(travel_mode)){
                    transportation = new Taxi();
                    break;
                }else if("公交".equals(travel_mode)){
                    transportation = new Bus();
                    break;
                }else if("专车".equals(travel_mode)){
                    transportation = new VipTaxi();
                    break;
                }else if ("退出".equals(travel_mode)){
                    exit = false;
                    break;
                }else {
                    System.out.println("未按照提示输入,请重新输入:");
                    travel_mode = scanner_travel_mode.next();
                }
            }
            //选择的是正确方式,采集公里数,计算费用;如果选择退出,退出程序
            if (exit == true){
                System.out.println("请输公里数");
                //将录入的公里数保存在kilometer变量里
                float kilometer = scanner_distance.nextFloat();
                transportation.charging(kilometer);
                System.out.println();
            } else {
                System.out.println("----------------------------感谢使用----------------------------");
                System.out.println();
                break;
            }

        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值