抽象类和接口

简介: 抽象类和接口

一、抽象类


1.语法规则


在 Java 中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用 给出具体的实现体。

// 抽象类:被abstract修饰的类
public abstract class Shape { 
// 抽象方法:被abstract修饰的方法,没有方法体 
   abstract public void draw(); 
   abstract void calcArea(); 
// 抽象类也是类,也可以增加普通方法和属性
   public double getArea(){ 
     return area; 
   }
   protected double area; // 面积 
}

注意:抽象类也是类,内部可以包含普通方法和属性,甚至构造方法


2.抽象类的特性


1. 抽象类不能直接实例化对象,否则会编译出错。

2. 抽象方法不能是 private 的,因为抽象类是需要被继承的,所以不能设置为私有的。 如果抽象方法没有加访问限定符时,默认是public.

3.  抽象方法不能被 final 和 static 修饰,因为抽象方法要被子类重写。

4. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修饰。

5. 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类。

6. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量。

3.作用


抽象类本身不能被实例化 , 要想使用 , 只能创建该抽象类的子类 . 然后让子类重写抽象类中的抽象方法 . 但是 普通的类也可以被继承呀, 普通的方法也可以被重写呀, 为啥非得用抽象类和抽象方法

呢?

使用普通类也能够做到,但是使用抽象类相当于 多了一重编译器的校验。


二、接口


1.语法规则


接口的定义格式与定义类的格式基本相同,将class关键字换成 interface 关键字,就定义了一个接口。


public interface 接口名称{ 
   // 抽象方法
   public abstract void A(); // public abstract 是固定搭配,可以不写
   public void B(); 
   abstract void C(); 
   void D(); 
   // 注意:在接口中上述写法都是抽象方法,推荐方式4( void D();),代码更简洁 
}


2.接口的使用


接口不能直接使用,必须要有一个"实现类"来"实现"该接口,实现接口中的所有抽象方法。子类和父类之间是extends 继承关系,类与接口之间是 implements 实现关系。


3.接口特性


1. 接口不能实例化。


2. 接口中每一个方法都是 public 的抽象方法 , 即接口中的方法会被隐式的指定为 public abstract (只能是public abstract,其他修饰符都会报错 )。

3. 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现

4. 重写接口中方法时,不能使用 default 访问权限修饰,因为接口默认是public,子类重写时,子类的访问权限要大于等于父类的权限。

5. 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量。

6. 接口中不能有静态代码块和构造方法。

7. 接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是 .class。

8. 如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类。

9. jdk8 中:接口中还可以包含 default 方法。

4.实现多个接口


在 Java 中,类和类之间是单继承的,一个类只能有一个父类,即 Java 中不支持多继承 ,但是 一个

类可以实现多个接 口。一个类实现多个接口时,每个接口中的抽象方法都要实现,否则类必须设置

为抽象类 。

5.接口间的继承


在 Java 中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承。即:

用接口可以达到多继承的目的。接口可以继承一个接口, 达到复用的效果 . 使用 extends 关键字。

接口间的继承相当于把多个接口合并在一起。

interface A extends A1, A2, A3 { 
}


三、抽象类和接口的区别


抽象类和接口都是 Java 中多态的常见使用方式。


抽象类中可以包含普通方法和普通字段 , 这样的普通方法和字段可以被子类直接使用 ( 不必重写 ), 而 接口中不能包含普通方法, 子类必须重写所有的抽象方法。


1667910435078.jpg


总结


抽象类:


1.抽象类使用abstract修饰。


2.抽象类中可以包含普通类中所包含的成员。


3.抽象类与普通类不一样的是,抽象类可以包含抽象方法。


4.抽象方法使用abstract修饰,抽象方法可以没有具体的实现。


5.不能实例化抽象类。


6.抽象类存在的意义就是为了被继承。


7.如果一个普通类继承了一个抽象类,那么普通类就必须重写抽象类当中的方法。


8.如果一个抽象类A继承了一个抽象类B,此时A当中不需要重写B当中的抽象方法,但是如果A再被普通类继承,就需要重写。


9.抽象方法不能是私有的,要满足重写的规则。


10.抽象类当中可以有构造方法,是为了方便子类能够调用,来初始化抽象类中的成员。


接口:


1.使用interface来修饰接口。


2.接口当中的成员方法不能有具体的实现:默认是public abstract 的方法;JDK8开始,允许有可以实现的方法,但这个方法只能是由default修饰。可以实现有一个静态方法。


3.接口中的成员变量默认是 public static final 修饰的。


4.接口不能被实例化。


5.类与接口之间采用implements来实现多个接口。


6.子类重写抽象方法,必须加上public。


7.接口中不能有静态代码块和构造方法。


8.如果不想实现接口的方法,可以把这个类定义为抽象类,但是这个类如果被其它类继承,就需要重写。


9.一个类可以实现多个接口,使用implements,用逗号隔开,这样可以解决多继承的问题。


相关文章
|
3月前
|
Java 编译器
关于抽象类和接口(详解)
关于抽象类和接口(详解)
50 6
|
3月前
|
程序员 C++
抽象类与接口
抽象类与接口
41 0
|
8月前
|
C++
c++接口(抽象类)
c++接口(抽象类)
66 1
|
8月前
|
Java 编译器
抽象类和接口
抽象类和接口
C++中的抽象类和接口
C++中的抽象类和接口
97 0
|
Java 编译器
07 接口和抽象类
接口 比抽象类更加抽象的是接口,在接口中所有的方法都会被 public abstract 修饰。 注意:Java 8 之后接口中新增加了 default 默认方法和 对 static 方法的支持。 • Java 中不支持多继承,而是通过接口实现比多重继承更强的功能,java 通过接口可以使出于不同层次,甚至不相关的类具有相同的行为. • 接口可以认为是特殊的抽象类, 不能用于直接创建对象。接口的作用在于规定一些功能框架,具体功能的实现则通过该接口约束的类完成。
122 0
抽象类与接口
抽象类 abstract修饰符可以用来修饰方法,也可以用来修饰类,修饰方法就是抽象方法,修饰类就是抽象类 抽象类中可以没有抽象方法,但是抽象方法的类一定要声明为抽象类 抽象类,不能使用new关键字来创建对象,它使用来让子类继承的 抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的 子类继
|
存储 API
使用抽象类和接口的优解
使用抽象类和接口的优解   1. 前言 2. 所谓习惯认知 3. 开门见山的万金油 第1条:抽象类设计注重对象性,接口设计注重服务性 第2条:更近的抽象类,更远的接口 第3条:子类间有关系时考虑用抽象类,没有关系时一定要用接口 第4条:版本迭代中优先考虑使用抽象类而不是接口 4. 设计是个性的妥协 5. 参考资料 1. 前言 笔者相信,每个使用面向对象语言的开发者自编码以来,肯定便琢磨过抽象类(Abstract)和接口(Interface)的区别。
875 1