一、今日学习内容:
1.abstract关键字
(1)抽象类
由abstract关键字修饰的类叫抽象类,抽象类必须由子类继承才能实例化对象。
抽象类中的方法 | 抽象方法 |
具体方法 |
抽象类的定义形式:abstract class 类名{ }
(2)抽象方法
由abstract修饰的方法称为抽象方法,其中抽象方法必须在抽象类中,且在抽象类中对抽象方法只进行声明,其方法体在子类中。若需要使用这些方法,需要由子类实现。
public abstract class student2 { protected abstract void test(); public static void main(String[]args) { student3 s=new student3(); s.test(); } } class student3 extends student2{ @Override public void test() { System.out.println("test方法!"); } }
另外需要注意的是抽象类无法被实例化。
抽象类和抽象方法总结 | 抽象类中既含有抽象方法,也有非抽象方法 |
含有抽象方法的类一定是抽象类 | |
抽象类中不一定含有抽象方法 |
2.综合实例——选择题
其中设置Question为父类,单项选择题和多项选择题分别是子类。
package atm; import java.util.Arrays; public class Question { public String text; //题目文本 public String[] options; //选项 public void print() { System.out.println(this.text); for(int i=0;i<options.length;i++) { System.out.println(options[i]+"\t"); } } public boolean check(char[] answers) { return false; } } class singleQuestion extends Question{ char answer; //标准答案 public singleQuestion(String str,String [] opt,char ans) { this.text=str; this.options=opt; this.answer=ans; } public boolean check(char[] answers) { if(answers==null||answers.length!=1) return false; return this.answer==answers[0]; } } class multiQuestion extends Question{ char [] answer; //标准答案 public multiQuestion(String str,String [] opt,char [] ans) { this.text=str; this.options=opt; this.answer=ans; } public boolean check(char[] answers) { return Arrays.equals(answers,this.answer); } } package atm; import java.util.*; public class PersonDemo { public static void main(String[] args) { Question []paper= {null,null}; paper[0]= new singleQuestion("如何买火车票靠谱?",new String [] {"A.电话","B.黄牛","C.画的"},'A'); paper[1]= new multiQuestion("谁是歌手?",new String[] {"A.刘德华","B.张学友","C.孙悟空","D.周杰伦"},new char[] {'A','B','D'}) ; Scanner sc=new Scanner(System.in); for(int i=0;i<paper.length;i++) { paper[i].print(); System.out.println("请选择:"); String s=sc.nextLine(); char [] answers=s.toCharArray(); //将字符串转换为字符数组 if(paper[i].check(answers)) { System.out.println("答案正确!\n"); } else System.out.println("答案错误!\n"); } } }
二、问题
如果子类也设置成抽象类会出现问题
三、明天写这一章的题