一道java题目大神们看看代码该怎么做,还有重载的含义

(1)编写抽象类Pet, 属性(实现封装):名字,年龄,体重; 抽象方法speak,eat 重载toString()方法,输出各成员变量值。

(2)编写Bird类继承Pet,特有属性(实现封装):flySpeed;重载toString()方法,输出各成员变量值。

(3)编写Cat类继承Pet,特有属性:颜色 重载toString()方法,输出各成员变量值。

(4)编写Dog类继承Pet,特有属性:品种 重载toString()方法,输出各成员变量值。

(5)创建6个元素的数组,分别存放2个Cat、2个Dog和2个Bird对象 将数组元素按重量倒序排序,然后打印各对象的字符串表示(toString)

主要思路;

    。创建父类子类你自己看着敲进去,比较简单。

    每个函数都要有一个带参数的构造函数;当数组中的参数传入时可以对子类对象初始化。

    最后比较排序我是用另一个数组接收原数组元素(对象)中的getWeight() 方法的返回值用于排序,然后在找到对应的值打出来就能达到你要的效果了。

父类:

package playgame;


public abstract class Pet {

private String name;

private int age;

private double weight;

public void getInformation(String name,int age,double weight){

this.name=name;

this.age=age;

this.weight=weight;

}

public double getWeight(){

return weight;

}

public String toString(){

  String str="name="+name+",age="+age+",weight"+weight;

  return str;

}

public abstract void speak();

public abstract void eat();


}

package playgame;


public class Bird extends Pet{

private String name;

private double weight;

private double flyspeed;

public Bird(String name,double flyspeed,double weight){

this.name=name;

this.flyspeed=flyspeed;

this.weight=weight;

}

public double getWeight(){

return weight;

}

public void speak(){

System.out.println("我是一只小小鸟");

}

public void eat(){

System.out.println("我最爱吃虫子");

}

    public String toString(){

     String str="name="+name+",flyspeed="+flyspeed+",weight="+weight;

     return str;

    }

}

package playgame;


public class Cat extends Pet {

    private String name;

    private String coulour;

    private double weight;

    public Cat(String name,String coulour,double weight){

     this.name=name;

     this.coulour=coulour;

     this.weight=weight;

    }

    public double getWeight(){

     return weight;

    }

public void speak() {

System.out.println("我是一只猫");

}

public void eat() {

System.out.println("我爱吃鱼");

}

public String toString(){

String str="name="+name+",coulour="+coulour+",weight="+weight;

return str;

}


}

package playgame;


public class Dog extends Pet {

  private String name;

  private double weight;

  private String variety;

  public Dog(String name,String variety,double weight){

 this.name=name;

 this.variety=variety;

 this.weight=weight;

  }

  public double getWeight(){

return weight;

}

public void speak() {

       System.out.println("我是一只狗");

}

public void eat() {

System.out.println("我爱吃骨头");

}

public String toString(){

String str="name="+name+",weight="+weight+",variety="+variety;

return str;

}


}

package playgame;


import java.util.Arrays;


public class Text1 {

public static void main(String[] args) {

Pet arr[]={new Dog("狗","藏獒",180000.5),new Dog("狗","藏獒",180006.5),

new Cat("猫","红色",18000.5),new Cat("猫","黑色",18000.5),

new Bird("鸟",20.5,180), new Bird("鸟",22.5,187)};

double arr1[]=new double[6];

  for(int i=0;i<6;i++){

  arr1[i]=arr[i].getWeight();

  }

  Arrays.sort(arr1);

  for(int i=0;i<6;i++){

  for(int j=0;j<6;j++){

  if(arr1[i]==arr[j].getWeight()){

  System.out.println(arr[j].toString()+"\t");

  break;

  }

  }

  }


}


}

最后面这个是主函数的类。。请他三个子类在中间,有不明白的地方在追问。

追问

请问:如果用构造函数该怎么改呢?
我们还没学过Return的方法这样做,看下来还挺模糊的
还有后面的子类的age怎么就没有了呢
最后的输出能够不用数组吗
谢谢

追答

1. 我没看明白你说的第一个问题的意思。
2. 至于说return 这个主要用于函数里返回值用的,用法比较简单,没有其他要求,类似于 int char 之类的关键字,你记住就可以了。

3. age 属于其中的一个变量,如果你需要这个变量就在父类函数中定义一下。(子类中定义不行,因为new对象的时候是采用父类的引用,如果定义在子类中,对象是无法调用该变量的。)
4.最后输出采用数组比较方便,如果你真不用数组的话,那你就一条条的打印。

追问

我一直在纠结toString()方法,这个为什么要用String toString(),我用void toString()好像会报错,用String跟Return有关系吗

至于第一个问题我一开始是这样想的,Pet用构造函数
public void getInformation(String name,... , ...)能否换成Pet(String name,int age,int weight){

追答

函数格式是这个的。
函数权限(如public ) +返回值类型(如String ,如果没有返回值就用void 如果有返回值 就表明返回值类型,同事函数必须 用return :返回值类型 结束)
String toString 中 前面的String 表示返回值类型。既然有返回值,就必须用 reuturn 写出返回值。

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-10-25
这段代码...你需要重新学下基本语法, 或者这实际上是改错题?
public class Information {
public int inlfo(int id){
return a;// [a] 未定义的标识符
}
public int inlfo(int id, int age){
return id,age; //你的意思大概是返回多个对象吧, 函数只能返回一个对象, 所以根本不存在这样的语法.
}
public int inlfo(int id, int age int TEL){//漏了逗号
return id,age,TEL; //同上
}
public static void mian (Sting[] args)
{
System.out.println("id"+sh.inlfo(01));//[sh] 未定义的标识符, 加上Information sh = new Information ();
//01 是什么? string还是int? 如果是字符串那应当加上"", 但与函数定义不同, 无法通过编译(string类型无法隐式转换为int类型). 如果是数字, 只要写1就好了, 写01貌似会有编译器警告(记不清楚了, 不确定);
System.out.println("id"+sh.inlfo(01,20));
System.out.println("id"+sh.inlfo(01,20,3359112));
}
}

修改参考:
public class Information {
public String inlfo(int id) {
//虽然任何类型都可以隐式转换为字符串, 但初学者最好使用显式类型转换, 这样可以省去很多不必要的麻烦
return String.valueOf(id);
}

public String inlfo(int id, int age) {
return String.valueOf(id) + "," + String.valueOf(age);
}

public String inlfo(int id, int age, int TEL) {
return String.valueOf(id) + "," + String.valueOf(age) + "," String.valueOf(TEL);
}

public static void mian (Sting[] args) {
Information sh = new Information();
System.out.println("id" + sh.inlfo(1));
System.out.println("id" + sh.inlfo(1, 20));
System.out.println("id" + sh.inlfo(1, 20, 3359112));
}
}

java 重载和重写的区别
①重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。②覆盖(也叫重写)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现体不一样。2.类的关系区别 覆盖是子类和父类之间的关系,...

新手请教java关于构造函数的问题,代码通不过,可以的话顺便讲讲构造函数...
People p1=new People("jack",16,'M',156,70);\/\/楼主等待你定义的构造函数,第三个是char,你用的是“M”表示的是String,所以会报错 p1.printValues();\/\/其次这里应该是p1,不是P1 构造函数的重载,其实就是一种经典的方法的重载。方法的重载,有以下要求 方法名相同。参数的个数或参数的类型...

java题目,请高手帮忙解决。
所谓函数重载是指同一个函数名可以对应着多个函数的实现。例如,可以给函数名add()定义多个函数实现,该函数的功能是求和,即求两个操作数的和。其中,一个函数实现是求两个int型数之和,另一个实现是求两个浮点型数之和,再一个实现是求两个复数的和。每种实现对应着一个函数体,这些函数的名字相...

下面是Java的题目,帮我解答一下,必有重谢。
1.面向对象 .java .class2 new extends3.选择结构 循环结构4.main5.156. 0 0 07.被新类实现,来监听ui界面的组件动作8. true,false1.int sumN (int n) {int sum=0; for(int i=1;i<=n;i++){ sum=sum+i;} return sum;}JDK包含的基本组件包括: ·ja...

这里有几道java题,求大神帮忙解答下好吗?非常感谢!
5、抛出异常可以两种方法:一种是try ... catch... 抛异常,一种是直接在类名后面throws抛异常 6、都能够表示当前,区别在于super可以调用父类 7、接口和抽象类的区别在于,实现接口的话,必须实现里面所有的抽象方法,而抽象类中可以存在非抽象的方法 8、覆盖就是将原来的方法重新定义重新写,重载...

...java中包,类,构造函数,成员变量,成员方法,重载,接口,SUPER,继承...
… 这样一个bark方法就带来了丰富多彩的变化。在Java 中允许类定义中多个方法的方法名相同,只要它们的参数声明不同即可。这种情况下,该方法就被称为重载(overloaded ),这种方式就叫做方法重载(method overloading )。方法重载是实现程序多样性的一个重要手段。也可以称作多态的一种表现方式。

java的一道题目
重载方法的规则。A、被重载的方法必须改变参数列表。参数必须不同,这是最重要的!不同有两个方面,参数的个数,参数的类型,参数的顺序。B、被重载的方法与返回类型无关。也就是说,不能通过返回类型来区分重载方法。C、被重载的方法可以改变访问修饰符。没有重写方法那样严格的限制。D、被重载的方法...

请从JAVA课本知识角度回答。小弟是要考试用的,老师只给了这个材料!希望...
在源程序代码中两者的主要区别是:任何一个Java Application应用程序必须有且只有一个main方法,它是整个程序的入口方法;任何一个Applet小应用程序要求程序中有且必须有一个类是系统类Applet的子类,即该类头部分以extends Applet结尾。2、抽象类是否能生成具体对象?其存在的意义?不能生成具体对象。在面向对象领域,抽象类...

JAVA好难学啊,但我还在坚持
一步一步的改进代码,而且全部是源代码,什么框架啊structs啊,spring啊,,JSP啊,什么servlet啊,全部都不用,这些架构功能都用相似的JAVA简单源代码来实现,其中把JAVA的基础知识大部分都参进来了,我可以打个比方啊,老师是要我们做一个考试系统 ,只能用源代码,要储存的数据首先要我们放到类里,看...

帮我解释一道JAVA题目,详细点哦,我基础不好,谢谢
从最后的Class1类开始,创建Child类的对象,对象名为myC,引用对象myC的方法printAll(),由于Child类是Parent派生的子类,在Parent的子类Child是定义了一个和父类同名的方法printMe(),覆盖了父类的printMe()方法,用super.printMe();是为了调用父类的同名方法,在此先输出parent 接着运行,this.print...

相似回答