• 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函数来获得值,所以要实现功能就要使用两种转换。

        明天寻找典型题目做。

  • 相关阅读:
    SQL注入与防范
    JDCP连接池连接数据库报错:java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid(I)Z
    数据库连接池(基于MySQL数据库)
    使用JDBC连接MySQL数据库的一个基本案例
    快速排序的java实现
    在C++的函数中如何指定一个数组,使得这个数组的大小由函数的输入值来决定
    WORD2010如何把全角字母和数字批量转换成半角
    地图安卓
    浅谈java异常[Exception]
    Adapter的getView
  • 原文地址:https://www.cnblogs.com/ruangongwangxiansheng/p/13591403.html
Copyright © 2020-2023  润新知