• 接口与继承系列教材 (九)- Java 抽象类详解


    在类中声明一个方法,这个方法没有实现体,是一个“空”方法 

    这样的方法就叫抽象方法,使用修饰符“abstract" 

    当一个类有抽象方法的时候,该类必须被声明为抽象类

    步骤1:抽象类
    步骤2:抽象类可以没有抽象方法
    步骤3:抽象类和接口的区别
    步骤4:练习-抽象类
    步骤5:答案-抽象类

    步骤 1 : 抽象类

    为Hero增加一个抽象方法 attack,并且把Hero声明为abstract的。
    APHero,ADHero,ADAPHero是Hero的子类,继承了Hero的属性和方法。
    但是各自的攻击手段是不一样的,所以继承Hero类后,这些子类就必须提供不一样的attack方法实现。

    package charactor;

    public abstract class Hero {

        String name;

        float hp;

        float armor;

        int moveSpeed;

        public static void main(String[] args) {

        }

        // 抽象方法attack

        // Hero的子类会被要求实现attack方法

        public abstract void attack();

    }

    package charactor;

    public class ADHero extends Hero implements AD {

        public void physicAttack() {

            System.out.println("进行物理攻击");

        }

        @Override

        public void attack() {

            physicAttack();

        }

    }

    package charactor;

    public class APHero extends Hero implements AP {

        @Override

        public void magicAttack() {

            System.out.println("进行魔法攻击");

        }

        @Override

        public void attack() {

            magicAttack();

        }

    }

    package charactor;

    public class ADAPHero extends Hero implements AD, AP {

        @Override

        public void attack() {

            System.out.println("既可以进行物理攻击,也可以进行魔法攻击");

        }

        public void magicAttack() {

            System.out.println("进行魔法攻击");

        }

        public void physicAttack() {

            System.out.println("进行物理攻击");

        }

    }

    步骤 2 : 抽象类可以没有抽象方法

    Hero类可以在不提供抽象方法的前提下,声明为抽象类 
    一旦一个类被声明为抽象类,就不能够被直接实例化

    package charactor;

       

    public abstract class Hero {

        String name; 

              

        float hp; 

              

        float armor; 

              

        int moveSpeed; 

           

        public static void main(String[] args) {

            //虽然没有抽象方法,但是一旦被声明为了抽象类,就不能够直接被实例化

            Hero h= new Hero();

        }

              

    }

    步骤 3 : 抽象类和接口的区别

    区别1:
    子类只能继承一个抽象类,不能继承多个
    子类可以实现多个接口
    区别2:
    抽象类可以定义
    public,protected,package,private
    静态和非静态属性
    final和非final属性
    但是接口中声明的属性,只能是
    public
    静态
    final的
    即便没有显式的声明

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

    package charactor;

      

    public interface AP {

      

        public static final int resistPhysic = 100;

         

        //resistMagic即便没有显式的声明为 public static final

        //但依然默认为public static final

        int resistMagic = 0

         

        public void magicAttack();

    }


    更多内容,点击了解: https://how2j.cn/k/interface-inheritance/interface-inheritance-abstract-class/314.html

  • 相关阅读:
    span与a元素的键盘聚焦性以及键盘点击性研究——张鑫旭
    小tip: 某简单的字符重叠与图形生成----张鑫旭
    HTML5 number类型文本框step属性的验证机制——张鑫旭
    小tip:FireFox下文本框/域百分比padding bug解决——张鑫旭
    视区相关单位vw, vh..简介以及可实际应用场景——张鑫旭
    好吧,CSS3 3D transform变换,不过如此!——张鑫旭
    HttpWebRequest.Proxy属性
    js动态函数
    js && ||
    eclipse工具栏sdk和avd图标
  • 原文地址:https://www.cnblogs.com/Lanht/p/12615537.html
Copyright © 2020-2023  润新知