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("亲,要努力呀!"); } } } }
二、遇到的问题
对示例理解不清楚
三、明日计划
继续学习第六章的内容