zoukankan      html  css  js  c++  java
  • 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 }

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

  • 相关阅读:
    高级软件工程第四次作业(C++)
    248&258--高级软件工程第三次作业
    高级软件工程第二次作业--四则运算生成器
    2017282110258--高级软件工程--齐爽爽第一次作业
    一元多项式求导_9
    成绩排名_8
    写这个数 _7
    我要通过_6
    月饼_5
    Hadoop的读写类调用关系_图示
  • 原文地址:https://www.cnblogs.com/lijiehua/p/8245596.html
Copyright © 2011-2022 走看看