java基础---接口

目录

接口定义及特点

实例

servlet

Servlet 接口与生命周期

GenericServlet 类

HttpServlet 类

抽象类设计的目的

实例

Arrays.sort()

实例

利用快速排序实现sort()

利用冒泡排序实现sort()


接口定义及特点

抽象类是对行为的抽象,而接口是一种行为规范(定义)

接口当中只能使用抽象方法,所以不需要去写abstract关键字,默认也是public访问修饰符修饰的

接口类不能创建对象,只能用多态

一个类可以实现(implements)多个接口,设计接口的目的之一就是要实现java类的多继承

实例

public interface A {
    public void run();
}

public interface Animal {
    public  void fly();
}

public class Cat implements A,Animal{
    @Override
    public void fly(){

    }

    @Override
    public void run() {

    }
}

以上代码定义了A和Animal两个接口,Cat类实现这两个接口以及其中的方法。

servlet

Servlet 是 Java 提供的一种技术,用于在服务器端处理客户端请求并生成响应。Servlet 的接口和生命周期的定义主要依赖于 Java EE 提供的规范。

Servlet 接口与生命周期

Servlet 接口定义了一个 Servlet 的生命周期,包括以下五个主要方法:

  1. init(ServletConfig config): 初始化方法,在 Servlet 被创建时调用一次,用于初始化资源或执行一些启动任务。ServletConfig 对象用于提供配置参数。
  2. service(ServletRequest req, ServletResponse res): 处理请求的方法,每次请求都会调用该方法。service() 方法的作用是根据客户端的请求类型(如 GET、POST 等),分发请求到相应的 doGet()、doPost() 方法。
  3. destroy(): 销毁方法,当 Servlet 被卸载或服务器关闭时调用一次,用于释放资源。
  4. getServletConfig(): 获取 Servlet 的配置对象 ServletConfig,该对象包含 Servlet 的初始化参数和 ServletContext。
  5. getServletInfo(): 返回一个描述 Servlet 的信息(如版本号、作者等)的字符串。

GenericServlet 类

GenericServlet 是一个抽象类,部分实现了 Servlet 接口。GenericServlet 提供了一个通用的实现,通常作为自定义 Servlet 类的父类。

  • GenericServlet 实现了 init() 和 destroy() 方法,提供了 Servlet 的通用操作。
  • 它还定义了一个抽象方法 service(ServletRequest req, ServletResponse res),要求子类必须实现该方法。

HttpServlet 类

HttpServlet 是 GenericServlet 的子类,专门为处理 HTTP 请求而设计。HttpServlet 提供了以下常用的方法来处理不同类型的 HTTP 请求:

  • doGet(HttpServletRequest req, HttpServletResponse res): 处理 HTTP GET 请求。
  • doPost(HttpServletRequest req, HttpServletResponse res): 处理 HTTP POST 请求。
  • doPut(HttpServletRequest req, HttpServletResponse res): 处理 HTTP PUT 请求。
  • doDelete(HttpServletRequest req, HttpServletResponse res): 处理 HTTP DELETE 请求。
  • doHead(HttpServletRequest req, HttpServletResponse res): 处理 HTTP HEAD 请求。

HttpServlet 实现了 service() 方法,负责将请求分发到相应的 doXXX() 方法(如 doGet()、doPost() 等)。

抽象类设计的目的

抽象类设计的目的之一是更好地去实现接口中定义的方法

抽象类(如 GenericServlet 和 HttpServlet)的设计目的是为了简化和优化接口的实现。具体而言:

  • 简化接口实现: 抽象类可以部分实现接口中的方法,使子类无需实现所有方法,只需关注核心功能的实现。
  • 提供默认行为: 抽象类可以提供接口的默认实现,方便子类继承和复用。
  • 增强扩展性: 抽象类为子类提供了扩展的基础,可以通过继承和重写来实现更复杂的功能。

实例

public interface Animal {
    void eat();
    void sleep();
}

public interface Flyable {
    void fly();
}

public interface Swimmable {
    void swim();
}

public abstract class AnimalBase implements Animal {
    @Override
    public void eat() {
        System.out.println("This animal is eating.");
    }

    @Override
    public void sleep() {
        System.out.println("This animal is sleeping.");
    }
}

public class Bird extends AnimalBase implements Flyable {
    @Override
    public void fly() {
        System.out.println("The bird is flying.");
    }
}

public class Fish extends AnimalBase implements Swimmable {
    @Override
    public void swim() {
        System.out.println("The fish is swimming.");
    }
}


public class Dog extends AnimalBase {
    
}


public class AnimalTest {
    public static void main(String[] args) {
        Bird bird = new Bird();
        Fish fish = new Fish();
        Dog dog = new Dog();

        // 测试鸟类
        System.out.println("Testing Bird:");
        bird.eat();
        bird.sleep();
        bird.fly();

        // 测试鱼类
        System.out.println("\nTesting Fish:");
        fish.eat();
        fish.sleep();
        fish.swim();

        // 测试狗类
        System.out.println("\nTesting Dog:");
        dog.eat();
        dog.sleep();
    }
}

输出结果:

Arrays.sort()

public class TestSort {
    public static void main(String[] args) {
        int[] arr = new int[]{9,2,5,1,8,3,7,4,6,0};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
    }
}

基本数据类型可以用Arrays.sort()进行排序,但是引用数据类型呢?

实例

public class Person implements Comparable<Person>{
    private Integer age;
    private Integer height;

    public Person(int age, int height) {
        this.age = age;
        this.height = height;
    }

    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", height=" + height +
                '}';
    }

    //实现排序的核心方法
    @Override
    public int compareTo(Person o) {
        //指定age从小到大排序
        //指定age从大到小排序:o.age - age
        return age - o.age;
    }
}

public class Test {
    public static void main(String[] args) {
        Person p1 = new Person(22, 180);
        Person p2 = new Person(30, 170);
        Person p3 = new Person(17, 160);
        Person p4 = new Person(23, 181);
        Person[] persons = new Person[]{p1, p2, p3, p4};

        Arrays.sort(persons);
        System.out.println(Arrays.toString(persons));
    }
}

输出结果:

[Person{age=17, height=160}, Person{age=22, height=180}, Person{age=23, height=181}, Person{age=30, height=170}]

如果想要对类中的对象进行排序,只需要实现Comparable接口,然后实现compareTo()方法。

利用快速排序实现sort()

public class QuickSort {
    public static void sort(Comparable[] arr, int left, int right) {
        if (left >= right) {
            return;
        }

        Comparable base = arr[left];
        int i = left;
        int j = right;

        while (i != j) {
            while (arr[j].compareTo(base) >= 0 && i < j) {
                j--;
            }

            while (arr[i].compareTo(base) <= 0 && i < j) {
                i++;
            }


            if (i < j) {
                Comparable temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }

        arr[left] = arr[i];
        arr[i] = base;

        sort(arr, left, i - 1);

        sort(arr, i + 1, right);
    }

    public static void sort(Comparable[] arr) {
        sort(arr, 0, arr.length - 1);
    }
}

利用冒泡排序实现sort()

public class Bubble {
    //不管什么类型的对象,都可以向上转型成其父类的类型(多态的典型应用)
    public static void sort(Comparable[] arr){
        for(int j = 0;j<arr.length;j++){
            for (int i = 0;i<arr.length-1;i++){
                if(arr[i].compareTo(arr[i+1]) >0){
                    Comparable temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值