Java基础——自学习使用(接口)

一、接口的定义

        抽象类是对行为的抽象,相当于是一种模板设计。接口是对行为的一种规范(定义)。

        Java的接口(Interface)是一种引用类型,它是方法声明的集合,这些方法都是抽象的,即只有声明没有实现。接口是一种形式上的契约,它规定了实现接口的类必须提供哪些方法,但不提供这些方法的实现细节。接口是Java实现多态性的一种重要手段,它允许我们定义一组方法规范,然后由不同的类去实现这套规范,从而实现了功能的多样性和扩展性。

二、接口的特点      

        1、接口当中只能使用抽象方法,所以也不需要写abstract关键字,默认也是public访问修饰符所修饰的。
        2、接口类不能创建对象,只能用多态。
        3、一个类可以继承(实现)多个接口,实现接口就意味着继承接口的所有方法。(设计接口的目的之一就是实现java类的多继承)

三、接口的使用

        

        servlet项目中,任何一个servlet都会继承HttpServlet。点进HttpServlet(抽象类)中发现其继承GenericServlet(抽象类)点进GenericServlet发现其实现了Servlet、ServletConfig、Serializable三个接口,进入到Servlet接口当中,发现有五个方法。

       

        其中创建、服务、销毁三个方法最重要(生命周期),servlet接口定义当前servlet的生命周期,从创建到销毁的整个流程。GenericServlet发现其实现除service的其他关于生命周期的方法。HttpServlet实现了service的方法。抽象类的设计目的之一就是更好的实现接口当中定义的方法。

四、接口常见面试题

(引用类型排序)

        如果让某一个对象进行排序可以自己实现Comparable接口,实现该接口的compareTo方法。该方法是用于排序的。

上述方法排序的是基本数据类型数据,如果排序的是引用类型数据,直接调用该方法则会发生报错,无法转化Comparable接口(该接口是用于排序的)。

如果调用该方法对引用数据类型进行排序,实现Comparable接口,填写一个泛型Person(随便起)。实现该接口的compareTo方法(该方法是实现排序的核心方法)排序利用数值进行排序。

(重写sort方法)

①用冒泡排序实现,创建一个Arraya2类,编写一个sort方法,传一个Comparable类型的数组(多态,向上转型。)

public class Arrays2 {
 
    // 5 7 4 2 0 3 1 6
    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){  // 5 -  7
                    Comparable temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
        }
    }
 
}
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从大到小进行排序o.age - age
        return age - o.age;
    }
}
import java.util.Arrays;
 
public class Test {
    public static void main(String[] args) {
        Person p1 = new Person(22,180);
        Person p2 = new Person(20,190);
        Person p3 = new Person(18,170);
        Person p4 = new Person(23,181);
        Person[] persons =new Person[]{p1,p2,p3,p4};
        // Arrays.sort(persons);
        Arrays2.sort(persons);
        System.out.println(Arrays.toString(persons));
    }
}

②使用快速排序替代上面的冒泡排序

package 排序;
 
public class Arrays2{
    public static void sort(Comparable[] arr) {
        if (arr == null || arr.length <= 1) {
            return;
        }
        quickSort(arr, 0, arr.length - 1);
    }
    private static void quickSort(Comparable[] arr, int low, int high) {
        if (low < high) {
            int pi = partition(arr, low, high);
            quickSort(arr, low, pi - 1);
            quickSort(arr, pi + 1, high);
        }
    }
    private static int partition(Comparable[] arr, int low, int high) {
        Comparable pivot = arr[high];
        int i = (low - 1);
        for (int j = low; j < high; j++) {
            if (arr[j].compareTo(pivot) <= 0) {
                i++;
                Comparable temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        Comparable temp = arr[i + 1];
        arr[i + 1] = arr[high];
        arr[high] = temp;
        return i + 1;
    }
}

五、习题

//Animal接口
public interface Animal {
     void eat();
     void sleep();
}

//Swimmable接口
public interface Swimmable {
    void swim();
}

//Flyable接口
public interface Flyable {
  public void flay();
}

public  abstract class AnimalBase implements Animal{
  public void eat(){
      System.out.println("喝饮料");
  }
    public void sleep(){
        System.out.println("睡觉");
    }
}
public class Fish extends AnimalBase implements Swimmable{
    @Override
    public void swim(){
        System.out.println("鱼会游泳");
    }
}
public class Dog extends AnimalBase{
}
public class Bird extends AnimalBase implements Flyable{
    @Override
    public void flay() {
        System.out.println("鸟会飞");
    }
}
//Test测试类
public class Test {
    public static void main(String[] args) {
        Bird bird =new Bird();
        Dog dog =new Dog();
        Fish fish=new Fish();
        bird.eat();
        bird.sleep();
        bird.flay();
        System.out.println("*************");
        dog.sleep();
        dog.eat();
        System.out.println("*************");
        fish.eat();
        fish.sleep();
        fish.swim();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值