您的位置:首页 > 编程语言 > Java开发

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

2018-01-08 23:51 627 查看
一、抽象类

抽象方法的定义:在类中声明一个方法,这个方法没有实现体,是一个“空”方法 ,这样的方法就叫抽象方法,使用修饰符“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 }


同: 抽象类和接口都可以有实体方法。接口中的实体方法,叫做默认方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: