【JavaSE】抽象类和接口

一、抽象类

被abstract修饰的方法就是抽象方法,没有方法体,抽象方法必须存在于抽象类。

1. 特点:

  • 抽象类不能实例化
  • 抽象类中可以定义具体方法,还可以定义任意内容
  • 抽象类的使用:通过子类使用
  • 抽象方法:必须重写
  • 抽象方法以但被重写就不需要再次被重写,但可以再次按需重写
  • Abstract不能与private、final、native、static一起使用

2.与具体类比较

  1. 抽象类不能直接实例化,并且对抽象类使用 new 运算符会导致编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。
  2. 允许(但不要求)抽象类包含抽象成员。
  3. 抽象类不能被密封。
public abstract class Employee {
   private String name;
   private String address;

   public Employee(String name, String address) {
      this.name = name;
      this.address = address;
   }
   public abstract void output();
}

class Test extends Employee{

   public Test(String name, String address) {
      super(name, address);
   }

   @Override
   public void output() {
      
   }
}

二、接口

在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

1. 接口特性

  • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

2. 接口的声明

[可见度] interface 接口名称 [extends 其他的接口名] {
        // 声明变量
        // 抽象方法
}

注意:

  • 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
  • 接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。
  • 接口中的方法都是公有的。

例:

public interface BuyWater {
    void show(Water water);
}

3. 实现类

可以多实现

...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ...

例:

public class BuyWaterImpl implements BuyWater {
    @Override
    public void show(Water water) {
        System.out.println("名称:"+water.getName());
        System.out.println("容量:"+water.getVolume());
    }
}

4. 接口的继承

一个接口可以继承另一个接口,类似于类与类之间的继承关系
注意:
在Java中,接口可以实现多继承,但类的多继承不合法。
例:

public interface BuyWater extends BuyCoffee,BuyCola {
    void show(Water water);
}

5. jdk1.8新增功能

可以在接口中定义带有方法体的方法
静态方法:根据接口名调用
默认方法:根据实现类调用

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容