抽象类和接口

一.抽象类

定义一个类时,常常需要使用成员方法来描述对象的某些特征。有时,成员方法并不能准确描写对象的行为特征。例如,存在Animal类,类中存在一个shout()方法可以实现动物叫的行为。但是由于不同的动物叫声不同,shout()方法不能准确表现各种动物的叫声,因此产生了抽象方法和抽象类。

1.抽象方法的定义

访问修饰符 abstract 返回值类型 方法名 (参数);

 注意:抽象方法不需要方法体

抽象方法是类中所有对象的共同行为

含有抽象方法的类一定是抽象类


2.抽象类的定义

访问修饰符 abstract class 类名{

  访问修饰符 abstract 返回值类型 方法名 (参数);

       }


 3.抽象类的特征

(1)如果类中含有抽象方法,那么一定是抽象类

(2)抽象类不能实例化,即不能创建抽象类的对象

(3)要继承抽象类必须实现抽象类中的所有抽象方法

如果子类未能实现抽象类中的所有抽象方法则子类仍然是抽象类,依然不能实例化。

(4)抽象类虽然不能实例化,但可以有构造器

构造器的作用:子类继承抽象类后可以间接调用父类的构造器


4.关于abstract的拓展

(1)abstract不适用于属性,构造器和代码块。

原因:a.属性包括三部分 变量类型 属性名 和属性值三者缺一不可,因此不需要抽象

           b.构造器 是创建和初始化对象的特殊方法 ,如果用abstract修饰构造方法那么该构造方法所在的类就必须是抽象类,而抽象类不能实例化,这与构造方法的目的相驳。

           c.代码块 就是用{}括起来的一段代码 而abstract关键字的特点就在于它所修饰的对象没有具体实现,例如抽象方法没有{}方法体,因此,设想如果代码块没有了{}那还剩下什么呢?因此用abstract修饰代码块毫无意义。

(2)abstract不可以与static方法 ,final方法,final类和private方法共用

原因: a.静态方法可以通过类名.方法调用而抽象方法不能被调用,两者冲突。

            b.final修饰的方法无法被重写,而抽象方法由于没有方法体,因此一定要重写,两者冲突。

            c.final修饰的类为最终类无法再创建子类,而抽象类必须要创建子类进行实例化,两者冲突。

            d.private修饰的方法为私有方法,只能本类中可以被访问。而抽象方法必须可以在所在类的子类中被重写,即可以被其他类访问,两者冲突。

总结:abstract之所以不适合它们的根本原因在于加入abstract后它们自身的逻辑功能无法实现。


二.接口

如果抽象类中的方法都是抽象方法,那么可以将该抽象类定义为接口。接口中可以存放全局常量和抽象方法以及其他方法。


 

1.接口的定义

public abstract interface 接口名{  

         public static final 数据类名 常量名=常量值;

      publlic abstact void 方法名(参数);

 代码如下:


 

 2.接口与类的关系:实现

一个类可以实现多个接口弥补了Java类与类之间只能单继承的缺点

接口是一种规范,规定实现接口的实现类必须实现接口中的所有抽象方法

class 类名 implements 接口1,接口2{

      public void method(){
   }

}

 代码如下:  

 

 


3.接口与接口的关系:继承

interface 接口名3 extends 接口名1,接口名2{

}

 


 

 4.接口的多态性

引入:类的多态性指父类引用指向子类对象

 父类 变量名=new 子类对象;

 因为接口不能实例化,所以不存在接口的对象,但接口依靠类来实现,所以可以用接口指向实现类的对象。

接口名 变量名=new 实现类对象;         //创建接口实现类的对象

接口名 变量名=new 接口名(){          //创建接口匿名实现类的匿名对象

//重写抽象方法

};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值