#Z01769. Java面向对象之抽象类和接口

Java面向对象之抽象类和接口

题目描述

1-定义一个接口,接口名为Swimmer,接口里有一个公开的、抽象的、返回值为空、名字为swim的函数 2-定义一个抽象类,取名为Fish,Fish实现Swimmer接口(重写swim方法,但不给出具体实现)    Fish类里有一个 protected String name;字段,和一个构造函数如下   public Fish(String name)  {         this.name = name;  } 3-分别定义一个名为Crucian和Eel类,让他们都继承自Fish类,并分别实现Fish类里的抽象方法swim Crucian是鲫鱼的意思,Eel是鳝鱼的意思 鲫鱼类重写Fish的swim方法如下: @Override public void swim() {     System.out.println("I'm Crucian my name is " + name + " i use tail to swimming"); } 鳝鱼类重写Fish的swim方法如下: @Override public void swim()  {     System.out.println("I'm Eel my name is " + name + " i use body to swimming"); } 4-定义一个Human类,实现Swimmer接口,定义一个Submarine(潜水艇)类实现Swimmer接口 分别实现接口抽象方法,打印如下语句 I'm human my name is *** i use arm to swimming I'm Submarine my name is *** i use propeller to swimming ***是Human类和Swimmer类里的private String name; ***到时候替换能对象的变量name即可,还需获取名字的参数getName 5-从键盘一次读入4个单词,分别当作一个鲫鱼对象、一个鳝鱼对象、一个人对象和一个潜艇对象的名字 实例化4个对象后 6-调用如下语句打印对象的相关信息,其中tools类的代码我在下面给出         Tools.printClassDetails(对象名);         Tools.printFieldMessage(对象名);         Tools.printConMessage(对象名);         Tools.printClassMethodMessage(对象名); 7-Tools类的代码如下: 头部需要引入: import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method;

// 类的基本信息打印封装,可以打印类的所有自定义函数、所有字段类型和名字、所有构造函数等信息、和接口 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); } } }

输入格式

每行4个单词 若干行测试数据

输出格式

使用4个单词,按鲫鱼、鳝鱼、人类和潜水艇类的顺序 实例化4个对象,分别调用swim函数打印相关信息 然后使用Tools类的4个方法分别打印鲫鱼对象、人类和潜水艇类的相关对象信息

xiaoyua  xaioyub  xz u52
I'm Crucian my name is xiaoyua i use tail to swimming
I'm Eel my name is xaioyub i use body to swimming
I'm human my name is xz i use arm to swimming
I'm Submarine my name is u52 i use propeller to swimming
//忽略若干行,防止你们直接拷贝

提示

日防夜防月月防 sort、if最难防