#Z01768. Java面向对象第一题,哇哈哈

    ID: 1596 传统题 1000ms 256MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>ACMJava面向对象 面向对象🔨传统题

Java面向对象第一题,哇哈哈

题目描述

面向对象博大精深,但是一直不好出题 难点在于OJ只能机械的比对输出结果,但是狡猾的你们可以很无耻的使用面向过程编程,直接System.out.pritnln()打印信息 所以,我要想办法逼着你们用面向对象编程

题目要求:(请严格按照如下顺序定义Student类) 1-定义一个名为 Student 的类,里面定义三个字段,一个公开的 sname, 一个 受保护的 sex,一个私有的 age,分别是字符串、字符串 和 普通整形 2-定义2个构造函数,一个无参,一个有参,有参的构造函数3个参数分别和 sname,sex,age一一对应 3-然后定义一个返回值为int,名为xusui的函数,作用是返回比age大一岁的虚岁 4-重写Student对象的toString函数,返回如下格式的对象信息: [sname=xz,sex=boy,age=18] 其中 xz、boy、18分别从输入中读取。

为了防止你们作弊,要求最后能打印出如下的Student类的相关信息 从上到下,依次是类的类名父类名接口名、字段名、构造函数名、自定义函数名 --------------super class and interface-------------- //防止你们拷贝,忽略

--------------Fields-------------- //防止你们拷贝,忽略

--------------Constructors-------------- //防止你们拷贝,忽略

--------------Methods-------------- //防止你们拷贝,忽略 读到这里我估计你蒙圈了,我才刚开始面向对象,如何打印这些东西?不用方,小邹把代码给你写好了,你调用就行了:

import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method;

public class Main  { public static void main(String[] args)  {         Student s=new Student("xz","boy",18);         System.out.println(s.toString());         //System.out.println("xusui=" + (s.xusui())); //调用对象的 xusui方法,打印虚岁,防止你完全拷贝,到时候要取消行首的注释

        Tools.printClassDetails(s);         Tools.printFieldMessage(s);         Tools.printConMessage(s);         Tools.printClassMethodMessage(s); } }

//类的基本信息打印封装,可以打印类的所有自定义函数、所有字段类型和名字、所有构造函数等信息、和接口 class Tools { //打印给定类的所有自定义方法 public static void printClassMethodMessage(object obj) { System.out.println("\n--------------Methods--------------"); Class c = obj.getClass(); Method[] ms = c.getDeclaredMethods(); for(int i = 0; i { Class returnType = ms[i].getReturnType(); System.out.print(returnType.getName()+" "); System.out.print(ms[i].getName()+"("); Class[] paramTypes = ms[i].getParameterTypes(); for (Class class1 : paramTypes)  { System.out.print(class1.getName()+","); } System.out.println(")"); } }

    //打印变量信息 public static void printFieldMessage(object obj)  { System.out.println("\n--------------Fields--------------"); Class c = obj.getClass(); Field[] fs = c.getDeclaredFields(); for (Field field : fs)  { Class fieldType = field.getType(); String typeName = fieldType.getName(); String fieldName = field.getName(); System.out.println(fieldName+"-"+typeName); } }

//打印构造函数信息 public static void printConMessage(object obj) { System.out.println("\n--------------Constructors--------------");

Class c = obj.getClass(); Constructor[] cs = c.getDeclaredConstructors(); for (Constructor constructor : cs)  { System.out.print(constructor.getName()+"("); Class[] paramTypes = constructor.getParameterTypes(); for (Class class1 : paramTypes)  { System.out.print(class1.getName()+","); } System.out.println(")"); } }

//打印类名,父类和接口名 public static void printClassDetails(object obj) { System.out.println("\n--------------super class and interface--------------"); Class c=obj.getClass(); System.out.println("class name= "+c.getName()); System.out.println("super class="+c.getSuperclass().toString()); Class interfaces[] = c.getInterfaces();         for (Class inte : interfaces)          {             System.out.println("interface name:"+inte);         } } }

class Student { //这是你要完成的事情,尽情的面向对象吧 }

红色的是要完成的类的定义和函数啊,构造函数的书写

蓝色的是你在main里面如何调用我写好的tools类 橙色的tools类是我封装好的可以打印类相关信息的类

输入格式

多组测试数据 每组 输入3个数据,分别代表学生姓名、性别和年龄

输出格式

调用Student类的toString函数按格式打印相关信息并换行 然后调用xusui函数打印虚岁并换行 接着使用上面样例里4条蓝色的代码打印类的相关信息(前提你要按格式把Tools复制到Main类的下面)

xz boy 18
[sname=xz,sex=boy,age=18]
xusui=19
//后面的你们自己打印,省的被你们拷贝

提示

哎,这么周折干嘛,想学面向对象的自己会用class 来实现的