(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 写出返回值。
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...