软件测试 | Java抽象类的实际应用——模版设计
  p1prOQge3cDY 2023年11月02日 17 0

既可以为抽象类实例化,那么抽象类到底应该如何使用呢?来看下面的这样一种场景:假设人分为学生和工人,学生和工人都可以说话,但是学生和工人说话的内容是不一样的,也就是说,说话这个功能应该是一个具体功能,而说话的内容就要由学生或工人来决定了,所以此时就可以使用抽象类实现这种场景,如图所示。

软件测试 | Java抽象类的实际应用——模版设计_抽象方法

范例:抽象类的实际应用

abstract class Person {                               //定义抽象类Person
     private String  name;                           //定义name属性
     private int  age;                                //定义age属性
     public Person (String name,int age){           //为属性初始化
          this.name = name;                           //为name属性赋值
          this.age = age ;                            //为age属性赋值
}
     public String getName(){                       //取得name属性内容
          return  name; 
      }
      public int getAge(){                           //取得age属性内容
           return  age;
       }
      public voic say() {                              //说话的具体功能,要定义成普通方法
            System.out.printIn(this.getContent());
       }
       public abstract  String getContent();            //说话的内容由子类决定
}
   class Student extends Person {                       //定义Student类继承Person类
       private float score;
       public Student(String name,int age,float score) {
            super(name,age);                            //调用父类的构造方法
            this。score = score;        
       }
        public String getContent()                     //覆写父类中的抽象方法
              return  "学生信息 --> 姓名:"+ super.getName()+
                      ":年龄:" + super.getAge()
                       +":年龄:" + this.score;
         }
     }
     class Worker extends Person {                        //定义Worker类继承Person类
           private float salary;
           public  Worker(String name,int age,float salary)   {
               super(name,age);                            //调用父类的构造方法
               this.salary = salary;
   }
       public String getContent(){                         //覆写父类中的抽象方法
            return "工人信息 --> 姓名:"+super.getName()+
                 ":年龄:" + super.getAge()
                 +":工资:" + this.salary;
   }
}
public class AbstractCaseDemo02{
        public static void main (String[]  args) {
              Person   per1 = null;                           //声明Person对象
              Person   per2 = null;                           //声明Person对象
              per1 = new Student("张三",20,99.of);           //学生是一个人
              per2 = new Worker("李四",30,3000.of);           //工人是一个人
              per1.say();                                     //学生说学生的内容
              per2.say();                                     //工人说工人的内容
    }
  }

程序运行结果:

学生信息 -->姓名:张三:年龄20:成绩:99.0

工人信息 -->姓名:李四:年龄:30:工资:3000.0

从程序的运行结果中可以发现,在Person类中就相当于定义了一个模板,在主方法中调用时,调用的就是普通方法,而子类只需要实现父类中的抽象方法,就可以取得一个具体的信息。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

p1prOQge3cDY
最新推荐 更多