12.13

●抽象方法和抽象类( abstract修饰后的方法和类)

抽象类是一个特殊的类,类有的他基本都有,并且抽象类中还可以有抽象方法(只声明并没有方法体的方法),

普通类不能有抽象方法

抽象类的存在是为了实现-些难以具象化的方法(不能直接实例化) , 让其有具体对象时实现

抽象方法必须由子类继承后重写才能使用(当然抽象类的子类可以继续抽象那个抽象方法)

”●final和abstract不能同时存在

fina|不能被继承

abstract是需要被继承

.●抽象方法不能被static修饰

因为static是用来修饰类中可以直接用的属性或者方法,

但是抽象方法必须要继承后才能使用,所以不能被static修饰

●●抽象方法不能被private修饰

因为抽象方法的存在就是为了被继承后重写,

但是private的存在是为了不被继承后使用,所以不能被private修饰

●接口(特殊的抽象类interface修饰)

其中的属性只能为常量

就算没有用final修饰也为常量

●访问权限只能为public

必须给属性赋值

不写修饰符默认为public final

其中的抽象方法的访问权限只能为public

普通方法在JDK1.8之后可以用default修饰

也可以有静态方法

●在接口实现类中需要实现每个抽象方法

类和接口是实现关系,实现类的声明形式如下:

[访问权限修饰符] class 类名 [extends 父类名] [implements 接口列表]{

     必须重写接口中的方法( ){ }

   }

类与接口之间是实现关系,类实现接口。

接口不可以被实例化

实现了接口的实现类必须重写接口中所有抽象方法后,这个子类才可以被实例化,否则报错。

一个类可以实现多个接口,多个接口用逗号分隔,也可以不实现接口。

Java不支持多继承,Java将多继承机制进行改良变成了多实现

一个类在继承另一个类同时,还可以实现多个接口

接口的出现避免了单继承的局限性

接口和接口之间是继承关系

[修饰符]   interface 接口名  extends   接口名,接口名 {    

      接口中的方法( ){

                   }

   }

接口与接口之间是继承关系,而且可以多继承

接口的出现避免了单继承的局限性

  • 在Java中接口是一个比抽象类更加抽象的概念,由于只声明行为,因此在接口中的方法均是抽象的,下表中罗列了接口和抽象类的差异:
 

abstract class

interface

属性

不用限制

public 静态 final 常量

构造方法

可有可无

没有

普通方法

可以有具体方法

必须是public抽象方法

子类

单一继承

多重实现(接口继承接口时为多重继承)

 

  • 抽象类体现继承关系,一个类只能单继承
  • 接口体现实现关系,一个类可以多实现
  • 抽象类是继承 is a关系 (所属关系)在定义该体系的基本共性内容
  • 接口是实现是like a关系(不所属关系)在定义该体系额外功能
  • 接口继承与类继承对比:
    • Java类的继承是单一继承,Java接口的继承是多重继承
  • 接口可实现多继承原因分析:
    • 不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A无法确定该继承那一个
    • 接口全都是抽象方法,不存在实现冲突,继承谁都可以,所以接口可继承多个接口
  • Java8之前,Java接口纯粹是契约的集合,是一种程序设计的表达方式。从数据抽象的角度看,能够在不定义class的同时又可以定义type,是程序设计中强大而有用的机制。Java接口就是这些纯粹的接口组成的数据抽象
  • Java8之前,接口不能升级。因为在接口中添加一个方法,会导致老版本接口的所有实现类的中断

 

posted @ 2021-12-13 17:13  左边第三只猫  阅读(39)  评论(0)    收藏  举报