Java学习第18天

一、今日学习内容:

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");
        
            
    }
    }

}

二、问题

如果子类也设置成抽象类会出现问题

三、明天写这一章的题

原文地址:https://www.cnblogs.com/zyljal/p/13369491.html