2018/01/08JAVA 基础 / 接口与继承 / JAVA 抽象类详解:修饰符“abstract"、抽象类与接口的区别

一、抽象类

抽象方法的定义:在类中声明一个方法,这个方法没有实现体,是一个“空”方法 ,这样的方法就叫抽象方法,使用修饰符“abstract" 。如下代码第18行为声明抽象方法。

抽象类的定义:当一个类有抽象方法的时候,该类必须被声明为抽象类,用public abstract class + 类名 进行声明。但抽象类可以在不提供抽象方法的前提下,声明为抽象类 。如下代码第3行为抽象类的声明:

 1 package charactor;
 2  
 3 public abstract class Hero {//声明抽象类
 4     String name;
 5  
 6     float hp;
 7  
 8     float armor;
 9  
10     int moveSpeed;
11  
12     public static void main(String[] args) {
13  
14     }
15  
16     // 抽象方法attack
17     // Hero的子类会被要求实现attack方法
18     public abstract void attack();//声明抽象方法
19  
20 }

如下代码,一旦一个类被声明为抽象类,就不能够被直接实例化该抽象类。

 1 package charactor;
 2    
 3 public abstract class Hero {//声明抽象类
 4     String name;
 5           
 6     float hp;
 7           
 8     float armor;
 9           
10     int moveSpeed;
11        
12     public static void main(String[] args) {
13         //虽然没有抽象方法,但是一旦被声明为了抽象类,就不能够直接被实例化
14         Hero h= new Hero();//提示错误
15     }
16           
17 }

抽象类中声明一个抽象方法时,抽象类的多个子类继承了抽象类的属性和方法,但这些子类必须提供父类中空体抽象方法不一样的实现。

二、抽象类与接口的区别

异:

  1)子类只能继承一个抽象类,不能继承多个;子类可以实现多个接口

  2)抽象类中的属性可以定义public,protected,package,private,静态和非静态,final和非final的属性;但是接口中声明的属性,即便接口中没有显示的声明public static final int i = 0,而是直接int i = 0,也只能是public、静态的、final的属性。代码案例如下:

 1 package charactor;
 2   
 3 public interface AP {
 4   
 5     public static final int resistPhysic = 100;
 6      
 7     //resistMagic即便没有显式的声明为 public static final
 8     //但依然默认为public static final
 9     int resistMagic = 0;
10      
11     public void magicAttack();
12 }

同: 抽象类和接口都可以有实体方法。接口中的实体方法,叫做默认方法

原文地址:https://www.cnblogs.com/lijiehua/p/8245596.html