当前位置:网站首页>抽象类和接口

抽象类和接口

2022-08-11 07:35:00 crazy__xieyi

目录

  • 一、抽象类

  • 1.语法规则
  • 2.抽象类的特性
  • 3.作用
  • 二、接口

  • 1.语法规则
  • 2.接口的使用
  • 3.接口特性
  • 4.实现多个接口
  • 5.接口间的继承
  • 三、抽象类和接口的区别

  • 总结


一、抽象类

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. 抽象方法不能被finalstatic修饰,因为抽象方法要被子类重写。
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 中多态的常见使用方式。

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


总结

抽象类:

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,用逗号隔开,这样可以解决多继承的问题。

原网站

版权声明
本文为[crazy__xieyi]所创,转载请带上原文链接,感谢
https://blog.csdn.net/crazy_xieyi/article/details/126266418