Java笔记(接口)

本文详细介绍了Java中的接口概念及其与抽象类的区别,强调了接口在多态中的作用。通过交通工具的例子,展示了如何利用接口实现不同交通工具的能力,如飞行、渡河和行驶。同时,代码示例演示了如何创建交通工具类并实现相关接口,以及使用者如何选择和使用不同的交通工具,体现了接口回调和降低程序耦合度的优势。
摘要由CSDN通过智能技术生成

接口

接口的概念

特殊的抽象类,接口中的非静态方法必须是抽象方法,不允许有实现内容(方法体)
没有构造方法,不能创建接口的对象,因为接口完全抽象
接口中的变量都是常量(默认被public static final修饰),只能被赋值一次

public interface Test {
    public static final String name = "";//public static fina可以被省略
    stati void test(){};//可以被static修饰,可以有方法体
    void test1();//没有被static修饰的方法不能有方法体
    String sex;//报错
}

接口与抽象类的区别

相同点:

  • 可编译成字节码文件。
  • 不能创建对象。
  • 可以作为引用类型。
  • 具备Object类中所定义的方法。

不同点:

  • 所有属性都是公开静态常量,隐式使用public static final修饰。
  • 所有方法都是公开抽象方法,隐式使用public abstract修饰。
  • 没有构造方法、动态代码块、静态代码块。

接口的作用

因为类只能单继承,不能满足不同子类的需求
例如:

  • 动物——父类(因为定义时无法被确定是什么动物,所以动物类为抽象类)
    • 老鹰
    • 麻雀
    • 河马
    • 老虎

在这些父类中,不同动物有不同的行为,飞行、游、两栖、奔跑
如果把这些行为都放在抽象类父类中,就会导致不会飞的老虎也要实现这个方法,所以就有了接口的存在,你需要实现什么方法就实现什么接口

接口实现多态

public interface Runnable{
	//跑
    void run();
}

public interface Swimable {
	//游泳
    void swim();
}

//动物类,抽象
public abstract class Animal {
	public void eat() {
		System.out.println("吃");
	}
	public void sleep() {
		System.out.println("睡");
	}
}

//狗类,实现接口中的方法,并重写父类的方法
public class Dog extends Animal implements Runnable,Swimable{
	
	public void shout() {
		System.out.println("狗狗开始叫...");
	}

	@Override
	public void swim() {
		System.out.println("狗狗游泳...");
	}

	@Override
	public void run() {
		System.out.println("狗狗跑步...");
	}
	
	@Override
	public void sleep() {
		System.out.println("狗狗睡觉...");
	}
}

public class TestDog {
	public static void main(String[] args) {
		Dog wangcai=new Dog();
		Animal a=wangcai;
		Runnable runnable=wangcai;
		Swimable swimable=wangcai;
		
		//---------调用方法-----------
        wangcai.shout();
        a.eat();
        a.sleep();
		runnable.run();
		swimable.swim();
		
	}
}

接口回调

不了解,欢迎补充

接口好处

  • 程序的耦合度降低。
  • 更自然的使用多态。
  • 设计与实现完全分离。
  • 更容易搭建程序框架。
    • 更容易更换具体实现。

练习题

交通工具

实现交通工具抽象类(定义2-3个方法,有抽象方法和实现方法)

实现2-3个接口(交通工具能力如:飞行,渡河等)

实现3-4个交通工具类(如:火车,飞机,自行车等等)

入口方法创建交通工具,实现几个业务场景(接收参数和返回值为多态)

定义交通工具抽象类

//定义交通工具抽象类
package com.fish.www.vehiclesnew;

//定义交通工具抽象类,抽象方法为行动方法,方法为正在使用
public abstract class VehicleNew {
    String start;
    String end;
    int speed;

    public VehicleNew(String start, String end,int speed) {
        this.start = start;
        this.end = end;
        this.speed = speed;
    }

    public void route() {
        System.out.println("路线:" + start + "--->" + end);
    }

    //每种交通工具被使用时都要被提示:XX正在被使用
    public void use() {
        System.out.println("正在使用交通工具!");
    }

    //todo 随机事件
//    public abstract void randomEvents();
}

定义三个接口

//三个接口
package com.fish.www.vehiclesnew;

public interface CrossingTheRiver {
    void crossing();//渡河
}

package com.fish.www.vehiclesnew;

public interface Flight {
    void fly();//飞行
}

package com.fish.www.vehiclesnew;

public interface Travel {
    void travel();//马路上行驶
}

使用者类

//使用者类
package com.fish.www.vehiclesnew;

import java.util.Random;
import java.util.Scanner;

public class People {
    /**
     * 人类
     */
    String userName;
    int age;

    public People(String userName, int age) {
        this.userName = userName;
        this.age = age;
    }

	//形参为多态
    public void ride(VehicleNew vehicle) {
        System.out.println(userName + "出行的工具:");
        vehicle.use();
    }


	//返回值为多态
    public VehicleNew choseVehicles(int chose, String state, String end) {
        Random random = new Random();
        Scanner scanner = new Scanner(System.in);
        VehicleNew vehicle;
        if (chose == 1) {
            System.out.println("请输入你的航班号:");
            vehicle = new Aircraft(state, end, (random.nextInt(100) + 250), scanner.next());
        } else if (chose == 2) {
            System.out.println("请输入你乘坐轮船的层数:");
            vehicle = new Ship(state, end, scanner.nextInt(), (random.nextInt(100) + 150));
        } else {
            System.out.println("请输入你车的颜色:");
            vehicle = new Car(state, end, (random.nextInt(100) + 50), scanner.next(), "SUV");
        }
        return vehicle;
    }

}

交通工具类——飞机

//飞机类
package com.fish.www.vehiclesnew;

public class Aircraft extends VehicleNew implements Flight {

    String flight;//航班

    public Aircraft(String start, String end, int speed,String flight) {
        super(start, end, speed);
        this.flight = flight;
    }

    @Override
    public void fly() {
        System.out.println("乘坐航班号为"+flight+"的飞机正在以" + speed + "km/h的速度飞。");
        route();
    }

    @Override
    public void use() {
        System.out.println("使用飞机。");
        fly();
    }
}

交通工具类——汽车

//车类
package com.fish.www.vehiclesnew;

public class Car extends VehicleNew implements Travel{

    String color;
    String type;

    public Car(String start, String end, int speed, String color,String type) {
        super(start, end, speed);
        this.color = color;
        this.type = type;
    }

    @Override
    public void travel() {
        System.out.println("在高速上以"+speed+"km/h速度行驶的"+color+type);
        route();
    }

    @Override
    public void use() {
        System.out.println("使用自驾车");
        travel();
    }
}

交通工具类——轮船

//船
package com.fish.www.vehiclesnew;

public class Ship extends VehicleNew implements CrossingTheRiver {
    /**
     *
     */
    int numberOfLayers;

    public Ship(String start, String end, int numberOfLayers, int speed) {
        super(start, end, speed);
        this.numberOfLayers = numberOfLayers;
    }


    @Override
    public void crossing() {
        System.out.println("乘坐" + numberOfLayers + "层的轮船,正以:"+speed+"km/h的速度行驶。");
        route();
    }

    @Override
    public void use() {
        System.out.println("使用轮船。");
        crossing();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值