抽象类与接口

一、抽象类

1、概念

抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。通常在编程语句中用 abstract 修饰的类是抽象类。在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。

2、特点

  1. 抽象类不能被实例化,实例化应该交由它的子类来完成。

  2. 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。
  3. 抽象方法必须被子类重写。
  4. 子类中的抽象方法不能与父类的抽象方法同名。
  5. 抽象类不能被final所修饰(因为final修饰的类不能被继承)。
  6. abstract不能与private、static、final或native并列修饰同一个方法。

3、实例

父类Animal

 public abstract class Animal {  

    public abstract void voice();  

}   

子类cat、dog

 public class Cat extends Animal{  

    @Override  

    public void voice() {  

         System.out.println("喵喵喵");  

     }  

 }  
public class Dog extends Animal{  
     @Override  

    public void voice() {  

        System.out.println("汪汪汪");  

    }  

   
 }  

二、接口

1、概念

在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

2、特性

  1. 接口的所有方法访问权限自动被声明为public。
  2. 接口中声明的变量会自动变为被public static final修饰的常量,可以通过接口名直接访问。
  3. 接口中不存在方法体(jdk1.8之前)。
  4. 实现接口的普通类必须要实现该接口的所有方法,抽象类不用实现。
  5. 不能实例化一个接口,但是可以声明一个接口变量,该变量必须引用实现类的对象。
  6. 在实现多接口时,要避免方法名重复。因为实现类不知道重写的是哪个接口里的方法。
  7. 一个类可以实现多个接口,多个类也可以只实现一个接口。

3、实例

接口

interface Phone{  
    void make();  
} 

实现类

public class XiaomiPhone implements Phone {
    public XiaomiPhone() {
        this.make();
    }
    @Override
    public void make() {
        System.out.println("make xiaomi phone!");
    }
}

三、抽象类与接口的区别

区别
参数抽象类接口
默认的方法实现它可以有默认的方法实现接口完全是抽象的。它根本不存在方法的实现
实现子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现
构造器抽象类可以有构造器接口不能有构造器
与普通类的区别不能实例化抽象类接口是完全不同的类型
访问修饰符抽象类可以有publicprotecteddefault这些修饰符接口方法默认修饰符是public
继承抽象类可以继承一个类和实现多个接口接口只可以继承一个或多个其它接口

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值