2020.7.23

一、今日学习内容

  1、abstract关键字

      abstract是“抽象”的意思,使用abstract 修饰类,叫做抽象类。抽象类中既有抽象方法也有具体实现的方法,抽象类必须由其子类继承,才能实例化对象。abstract 修饰方法,叫做抽象方法,该方法只有方法头,没有方法体。

  (1)抽象类:abstract  class  类名{ }

                         示例:public  abstract  class  Type{  }

    (2)抽象方法:abstract修饰方法,表示该方法是抽象方法,但前提该类一定是抽象类。抽象方法只声明方法头,没有方法体。

         示例:

public abstract class Type {
   //只有方法头,没有方法体
   public abstract double area() ;
}

     抽象类中除了有抽象方法,还可以有具体的实现方法。

public abstract class Type {
   //只有方法头,没有方法体
   public abstract double area() ;
   public void info() {
      System. out.println ("我是图形");
   }
}

     如果想使用这些方法,必须由抽象类的子类来实现,例如:

public class Circle extends Type {
       private static final double PI=3.14;
       private int r=5;
         @override
          public double area () {
               double area = PI*r*r;
               return area;
         }
         public static void main(String[] args) {
              Type type=new Circle() ;
              type.area() ;
              type.info() ;
        }
}

       现将抽象类和抽象方法总结如下。
         (1)抽象类中既有抽象方法,也有非抽象方法。
         (2)有抽象方法的类一定是抽象类。
         (3)抽象类中不一定有抽象方法。

   2、综合实例:选择题示例

  父类:选择题

public class Question {
    String text; //题干
    String[] options; //选项
    public void print() {
        System.out.println(this.text);
        for(int i=0;i<this.options.length;i++) {
            System.out.print(options[i]+'\t');
        }
        System.out.println();
    }
    public boolean check(char[] answers) {
        return false;
    }
}

 子类:单项选择题

public class SingleQuestion extends Question{
    char answer;
    public SingleQuestion(String text,String[] options,char answer) {
        this.text=text;
        this.options=options;
        this.answer=answer;
    }
     public boolean check(char[] answers) {
         if(answers==null||answers.length!=1) {
             return false;
         }
         return this.answer==answers[0];
     }
}

 子类:多项选择题

import java.util.Arrays;
public class MultiQuestion extends Question {
    char[] answers;
    public MultiQuestion(String text,String[] options,char[] answers) {
        this.text=text;
        this.options=options;
        this.answers=answers;
    }
    public boolean check(char[] answers) {
        return Arrays.equals(answers,this.answers);
    }
}

 测试类:

import java.util.Scanner;
public class PaperDemo {
    public static void main(String[] args) {
        Question[] paper= {null,null};
        paper[0]=new SingleQuestion("如何买火车票靠谱?",
                new String[]{"A.电话","B.网上","C.黄牛","D.画的"},'A');
        paper[1]=new MultiQuestion("哪几位是歌手?",
                new String[]{"A.刘德华","B.张学友","C.郭富城","D.孙悟空"},
                new char[]{'A','B','C'});
        Scanner console=new Scanner(System.in);
        for(int i=0;i<paper.length;i++) {
            Question q=paper[i];
            q.print();
            System.out.print("请选择:");
            String str=console.nextLine();
            char[] answers=str.toCharArray();
            if(q.check(answers)) {
                System.out.println("给力呀!");
            }else {
                System.out.println("亲,要努力呀!");
            }
        }
        
    }

}

  

二、遇到的问题

   对示例理解不清楚

三、明日计划

  继续学习第六章的内容

posted @ 2020-07-23 12:54  小仙女W  阅读(135)  评论(0编辑  收藏  举报