一道java题目大神们看看代码该怎么做,还有重载的含义
(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.最后输出采用数组比较方便,如果你真不用数组的话,那你就一条条的打印。
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));
}
}