Java知识点总结【6】抽象类和接口

1.抽象类

1)什么是抽象类

抽象的反义词是具体,越不具体,就越抽象。abstract修饰的类就叫做抽象类,除了不能被实例化之外!其他语法规则和普通类都一样。

abstract关键字存在的意义,就是让程序员明确的告诉编译器,这个类是一个抽象的类,不应该进行实例化,于是编译器就要做好相关检查工作。

2)什么是抽象方法

  • 给方法前头加上 abstract 此时这就是一个抽象方法了.
  • 抽象方法不需要方法体.
  • 抽象方法只能在抽象类中存在(也可以在接口中存在), 不能在普通的类中存在.
  • 抽象方法存在的意义就是为了让子类进行重写.

3)举例

abstract class Animal{ //抽象类
    public abstract void eat(); //抽象方法
}

public class Blog {
    public static void main(String[] args) {
        Animal animal=new Animal();
    }
}

运行结果:

2.接口

1)什么是接口

我们知道,类之间只能单继承。为了实现类似“多继承”的效果,所以就引入了接口。接口是抽象类的更近一步,比抽象类还抽象。抽象类只是不能实例化,但是其他各个方面都和普通类差不多,接口就更抽象了,不光不能实例化,同时也不具备类的各种特性。

命名:接口的命名一般以大写字母I作为前缀,一般使用形容词进行命名。表示的语义:一个类具有XXX特性

2)举例

①接口中只能放抽象方法,不能放普通方法(下图中的波浪线~)

接口中的抽象方法可以不写public abstract关键字,写或者不写,都表示抽象的共有的方法~

但是抽象类中的抽象方法必须得写abstract关键字,抽象类中除了可以放抽象方法还可以放普通方法,所以不写得话就表示一个普通方法,就得加上方法体了。

②接口中只能放public static final修饰的属性,不能放普通的属性

interface IEating {
    public static final String food = "fish";
}

接口和类之间不能继承,只能是类实现了(implements)某个接口。接口和接口之间可以继承。

Animal类

public class Animal {
    
}

IEating接口

public interface IEating {
    public static final String food = "fish";
    public abstract void eat();
}

IJump接口

public interface IJump {
    void jump();
}

Cat类继承自Animal类,实现了IEating,IJump接口

public class Cat extends Animal implements IEating,IJump{
    @Override
    public void eat() {

    }
    @Override
    public void jump() {

    }

}

注意:

  • 实现的类必须重写接口中所有的方法。
  • 实现多个接口,接口之前使用逗号分割。

3.抽象类和接口的对比

  • 抽象类和普通类差不多,只是不能实例化。而接口和普通的类之间相去甚远(包含的属性,方法,和其它类的关系)
  • 一个类只能继承自一个抽象类,但是一个类可以同时实现多个接口。

为啥要发明接口这样的语法?

解决Java中不能多继承的问题。Java中的继承是单继承,有些场景下多继承是有用的。Java中可以通过继承一个类,实现多个接口的方式来完成类似于多继承的效果。

猜你喜欢

转载自blog.csdn.net/weixin_43939602/article/details/113096038
今日推荐