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)组成(jdk8多了default方法和static方法)

(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() {
        Barking.super.defaultMethod();
    }
}

异同点

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值