【Java】抽象类和接口的使用与区别

1.抽象类

  通过abstract修饰的类称为抽象类

//抽象类
public abstract class Anmail {
    public void shout(){
    //普通方法
    }
    
//抽象方法    
 abstract void body();

}

 

  特点:

    抽象类不可以实例化

    抽象类可以有构造方法

    抽象类和普通类的区别是抽象类可以有抽象方法,普通类没有抽象方法,抽象类可以有抽象方法,除此之外,抽象类当中的内容和普通类一样

    抽象类不可以使用Final来修饰的,因为被Final修饰的类为最终类,最终类不可以被继承

  抽象方法:

    使用abstract定义的方法称为抽象方法,抽象方法没有方法体

    特点:

      抽象方法必须被子类实现,有一种情况除外,其子类也为抽象类的时候

      如果在子类的继承线路当中,只要有一个子类实现了抽象方法,那么后面的子类则无需再实现该抽象方法,即使实现了,那也是重写

      抽象方法不可以被Final修饰成为最终方法,最终方法无法被重写

定义抽象类

//抽象类
 abstract class Animal1 {
     //抽象方法
    abstract void shout();
    
    //抽象方法    
    abstract void body();

}

实现子类继承抽象类

/**
 * 定义小狗类继承动物类的shout方法
 *
 */
 class Dog extends Animal1 {

    @Override
    void shout() {
        System.out.println("小狗汪汪叫~.~");
    }

    @Override
    void body() {
        System.out.println("这是狗身体 ");
    }
    
}

测试抽象类实现:

/*
* 定义一个测试类
* 一键运行,搞定抽象类
*/
public class Test {

public static void main(String[] args) {
//实例化Dog类
Dog dog = new Dog();
//实现狗叫
dog.shout();
//实现狗的身体
dog.body();
System.out.println("很简单吧,抽象类 is just so so");

}
}

 

2.接口

  通过interface定义的类称为接口。

//定义动物类接口
public interface Animal {
    /*
     * 接口中的常量都是静态常量,
     * 一般省略public static final,
     * 只写int ID = 1;即可
     */
    public static final int ID = 1;
    /*
     * 接口里面的方法默认都是public abstract修饰,这两修饰符可以不用写
     */
    public abstract void shout();
    
    void run();

}

 

  实现接口所有的抽象方法

/**
 * 定义小狗类实现动物类的shout方法和run方法
 *
 */
 class Dog implements Animal {

    @Override
    public void shout() {
        System.out.println("小狗在咆哮。。。");
    }

    @Override
    public void run() {
        System.out.println("小狗在草地上奔跑!");
    }

    
    
}

  测试实现的小狗类:

/*
 * 定义一个测试类
 * 一键运行,搞定接口
 */
public class Test {

    public static void main(String[] args) {
        //实例化Dog类
        Dog dog = new Dog();
        //实现狗叫
        dog.shout();
        //实现小狗跑步
        dog.run();
        System.out.println("很简单吧,接口实现 so easy");
    
    }
}

 

  特点:

    接口中的方法都是抽象的,不能实例化,也没有构造方法

    当一个类实现接口时,如果这个类是抽象类,则实现接口中的部分方法即可,否则需要实现接口中的所有方法

    接口中默认所有的方法都是抽象方法 ,默认所有的属性都是静态常量

    一个类通过implements关键字实现接口时,可以实现多个接口,被实现的多个接口之间要用逗号隔开

    一个接口可以通过extends关键字继承多个接口,接口之间用逗号隔开

    一个类在继承另一个类的同时还可以实现接口,此时extends关键字必须位于implements关键字之前(先继承,再实现)

    接口和接口之间是继承,且可以多继承

 

3.抽象类和接口的区别

  .抽象类只能单继承,而接口可以多实现,接口就是为了解决只能单继承的局限而诞生的。

  .抽象类可以有抽象方法,也可以有普通方法,接口里面只能存在抽象方法

  .抽象类可以实例化,可以有构造方法,但是接口不能实例化,也没有构造方法 

  .接口能继承接口也能通过子类实现抽象方法 

 

posted @ 2021-10-24 23:23  小墨儿  阅读(206)  评论(0编辑  收藏  举报