Java自学第五十二天

  今天继续做C++典型例题。

  

定义描述学生的student类,包含受保护两个数据成员,分辨是描述姓名的,string类型和描述学号的,int类型,构造函数有两个形参,用于设定这两个数据成员的值,此外包含6个成员函数,用于设定姓名和学号的函数,void setnameid(), 用于显示姓名和学号的函数void displaynameid(),以及四个纯虚函数void setmajor() ,string getmajor() , void setadvisor()  和 string getadvisor();

由学生类派生本科生类understud,新增受保护数据成员,描述专业,string类型,构造函数具有三个形参,重新定义函数void setmajor() 和string getmajor(),用于设置专业和获取专业;

由本科生类派生研究生类poststud,新增私有数据成员,描述导师姓名,string类型,构造函数具有四个形参,且具有缺省值,学生姓名缺省值为“***”,学号缺省值为-1,专业缺省值为“###”,导师姓名缺省值为“&&&”,重新定义函数void setadvisor()  和 string getadvisor(),用于设置导师属性和获取导师属性值;

在主函数中定义相应的指针对象和普通对象,请问可以定义哪些(哪个)类的普通对象,为什么(在实验报告中回答),定义开关变量,int型,通过输入进行赋值,若该值为0,则输出研究生对象的默认属性值,若非零,则依次输入姓名、学号、专业和导师信息,并依次打印出来。

  代码如下

  

package hello;

import java.util.Scanner;

abstract class student{

    protected String name;

    protected int num;

    student(String a,int b){

        name=a;

        num=b;

    }

    public void stuset(String a,int b) {

        name=a;

        num=b;

    }

    public void display() {

        System.out.println("name:"+name+" num:"+num);

    }

    abstract public void setmajor(String a);

    abstract public String getmajor();

    abstract public void setadvisor(String a);

    abstract public String getadvisor();

}

class understud extends student{

    protected String major;

    public understud(String a,int b,String c) {

        super(a,b);

        major=c;

    }

    public understud(String a,int b) {

        super(a,b);

    }

    public void setmajor(String a) {

        major=a;

    }

    public String getmajor() {

        return major;

    }

    public void setadvisor(String a) {}

    public String getadvisor() {return "0";}

    public void display() {

        System.out.println("name:"+name+" num:"+num+" major:"+major);

    }

}

class poststud extends understud{

    private String teaname;

    poststud(String a,int b,String c,String d){

        super(a,b,c);

        teaname=d;

    }

    public void setteaname(String a) {

        teaname=a;

    }

    public poststud(String a,int b,String c) {

        super(a,b,c);

    }

    public void setmajor(String a) {}

    public String getmajor() {return "0";}

    public void setadvisor(String a) {

        teaname=a;

    }

    public String getadvisor() {

        return teaname;

    }

    public void display() {

        System.out.println("name:"+name+" num:"+num+" major:"+major+" teaname:"+teaname);

    }

}

public class helloword {

    public static void main(String[] args){

    Scanner cn=new Scanner(System.in);

    System.out.println("输入本科生姓名年龄");

    student s=new understud(cn.next(),cn.nextInt());

    understud u=(understud)s;

    System.out.println("输入本科生专业");

    u.setmajor(cn.next());

    u.display();

    System.out.println("输入研究生姓名年龄专业");

    student s1=new poststud(cn.next(),cn.nextInt(),cn.next());

    System.out.println("输入导师姓名");

    poststud p=(poststud)s1;

    p.setadvisor(cn.next());

    p.display();

    }

}

  这道题目做他的目的是和昨天的那一道题相比,这道题涉及到了向上类型转换和向下类型转换,因为父类中的属性需要构造函数或者get函数来获得值,所以要实现功能就要使用两种转换。

    明天寻找典型题目做。

原文地址:https://www.cnblogs.com/ruangongwangxiansheng/p/13591403.html