JAVA 基础知识点复习(十一)抽象类和接口

抽象类abstract

描述一个事物却没有足够的信息,这时就称这个事物为抽象事物。

(1)如果存在抽象方法则该类一定要是个抽象类,反之则不一定

(2)抽象类不能实例化,子类必须重写所有的抽象方法才可以实例化

public abstract class Animal {

    public abstract void getName();

    protected abstract void getGender();
    
    abstract void getGender(); // 包外无法重写该方法
    
    private abstract void getGender(); // 编译错误
    
    public final abstract void getGender(); // 编译错误
    
    public static abstract void getGender(); // 编译错误
    
}

问题:

1.抽象类中有构造函数吗? 有,还可以给子类初始化

2.抽象类一定是一个父类吗? 一定,如果不是父类的话就失去存在的意义了

3.抽象类可以不定义任何抽象方法吗? 可以,但是没意义(为了让对象不能被new)

4.abstract和哪些关键字不能共享? final(不能被继承、重写)private(外部无法访问)static(不能被重写)

接口interface

如果一个抽象类中的所有方法都是抽象的,那么就可以用接口来表示

(1)接口只能由全局常量(默认修饰符 public static final)和抽象方法(默认修饰符 public abstract)组成

(2)类和接口间是实现关系,一个类可以实现多接口,接口和接口间是多继承关系

(3)接口的另一个应用是多态

public interface Barking {

    String SOUND = "";

    void getSound();
    
    default void defaultMethod(){} // jdk1.8 接口默认方法
    
    static void staticMethod(){} // jdk1.8 接口静态方法
}

静态方法

定义:接口可以声明静态方法并且实现,无法被实现类重写和调用,相当于类方法只能被自身调用

实例:Stream接口

public interface Barking {
    static void staticMethod(){
        System.out.println("Barking static");
    }
}

public static void main(String[] args) {
	Animal.staticMethod();
}

默认方法

​ 在java8以前如果想要在一个已使用的接口增加方法,则需要在所有实现类中都新增这个方法,而默认方法则解决了这个问题,它提供了一个默认实现,当没有显示提供其他实现时就采用这个实现,并且它是可选的,并不强制实现,子类可以根据不同的需求进行重写。

定义:接口可以声明默认方法并且实现,可以被实现类可选择的重写

  • 当实现的多个接口中有相同签名的默认方法时,必须在实现类中通过重写方法解决冲突,并且可以通过接口名.super.方法名(); 的方式显示调用需要的方法。
  • 当继承的父类和实现的接口中有相同签名的方法时,优先使用父类的方法。
  • 当接口的父接口中也有同样的默认方法时,就近原则调用子接口的方法。
public interface Barking {
    default void defaultMethod(){
        System.out.println("Barking default");
    }
}

public interface Eat {
    default void defaultMethod(){
        System.out.println("Eat default");
    }
}

public class Dog implements Barking , Eat {
    @Override
    public void defaultMethod() {
        Animal.super.defaultMethod();
    }
}

异同点

1.抽象类可以定义成员变量、抽象方法和非抽象方法,接口只能定义抽象方法(jdk1.8后增加默认方法和静态方法)和全局常量

2.非抽象类实现一个接口就必须重写所有抽象方法,而抽象类不需要

3.抽象类主要用来抽象类别,接口用来抽象功能,当你关注一个事物的本质时用抽象类,当你关注一个操作时用接口

例:猪、狗、猫 对应的抽象类就是动物。对应的接口可以有叫声、食物等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章