java的一个小程序,帮我看看哪不对?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的一个小程序,帮我看看哪不对?相关的知识,希望对你有一定的参考价值。
package bao1;
public class Huadan
float ct=500f;
float dx=200f;
float sh=300f;
float hf;
String tc;
public void fangfa()
System.out.println(tc+hf);
然后分了几个子类:
package bao1;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Donggandidai extends Huadan
public float fangfa1()
float ctf=0.6f;
float dxf=0.1f;
float shf=0.25f;
tc="动感地带的资费是";
hf=ctf*ct+dxf*dx+shf*sh;
return hf;
package bao1;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Quanqiutong extends Huadan
public float fangfa3()
float ctf=0.5f;
float dxf=0.1f;
float shf=0.3f;
tc="全球通的资费是";
hf=ctf*ct+dxf*dx+shf*sh;
return hf;
package bao1;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Shenzhouxing extends Huadan
public float fangfa2()
float ctf=0.4f;
float dxf=0.1f;
float shf=0.1f;
tc="神州行的资费是:";
hf=ctf*ct+dxf*dx+shf*sh;
return hf;
建了一个工厂:
public class Factory
public Huadan fangfa4(int i)
Huadan a;
if(i==1)
a=new Donggandidai();
if(i==2)
a=new Quanqiutong();
else
a=new Shenzhouxing();
return a;
最后用这个类来调用:
package bao1;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Test extends Factory
public static void main(String[] args)
Factory f=new Factory();
Huadan a=f.fangfa4(1);
a.fangfa();
大致知道你要干什么拉
有几个地方要改
1 public class Donggandidai extends Huadan
public Donggandidai()
float ctf=0.6f;
float dxf=0.1f;
float shf=0.25f;
tc="动感地带的资费是";
hf=ctf*ct+dxf*dx+shf*sh;
还有2个类也这样改,就是都改到构造方法里面去!
2 public class Factory
public Huadan fangfa4(int i)
Huadan a;
if(i==1)
a=new Donggandidai();
if(i==2)
a=new Quanqiutong();
else
a=new Shenzhouxing();
return a;
多个判断用swith case,比较好,你这里上面i==1 等于白判断了
switch (i)
case 1:a=new Donggandidai();break;
case 2:a=new Quanqiutong(); break;
case 3:a=new Shenzhouxing(); break;
return a
再简单分析下拉
你Factory类的fangfa4方法返回一个Huadan类,你用创建它的子类返回这没有问题的,你在主方法中用一个Huadan来指向这个子类也没有问题,这相当于用一个父类的变量指向一个子类的对象,也就是多态!但是这个时候你是不能再调用子类的独有而父类没有的方法,而且你没有定义子类的构造方法,所以父类的2个成员变量hf和tc没有赋你想赋的值,都只有它们的默认值null和0.0,所以你打印出来的是null0.0,而且你Factory中的fangfa4方法中的判断也不对,如果判断比较多,建议用switch case 参考技术A 提示什么错误
java程序问题?
哪位大神帮我解答这个?应该是个小问题。。。
因为没有显式提供构造方法(也叫构造器或构造函数),所以,java会自动为你提供一个默认构造方法(无参构造方法) ,而new ObjectInstance()就是调用的这个默认构造方法来创建对象的。同时类ObjectInstance覆盖(重写)了toString方法,这个方法的作用就是把类ObjectInstance的对象转换成一个字符串。
在这个方法内部调用了从Object类继承的getClass方法,getClass方法会返回一个类Class(注意这里的Class表示一个类,实际上Class还是一个泛型类)的对象,这个Class类的对象保存了类ObjectInstance的元数据(比如,ObjectInstance类有哪些属性、哪些方法、超类是谁、实现了什么接口等)。而Class类的对象有一个getName方法,这个方法会返回Class对象表示的类的类名,因为现在的Class类的对象保存的是类ObjectInstance的元数据(即它代表了类ObjectInstance),所以getName方法返回的是类ObjectInstance的类名"ObjectInstance"。
而当调用println输出一个类ObjectInstance的对象时,会先自动调用这个对象的toString方法,将对象转换为字符串后再输出。所以,输出的是ObjectInstance类的类名。追问
为什么会自动调用重写的toSpring方法?
追答因为你在用println输出一个对象啊。
println函数有一个重载版本是println(Object o),你调用的正是这个重载。在这个重载函数内部的某个地方会调用o.toString()将对象转换为字符串(就是在这里调用的toString),然后输出。
直白地讲,调用对象的toString方法,就是方法println为你提供的功能。
我明白了。其实就是print的源码中调用了toString。
追答就是这样的啊
追问这几天刚开始学。嗯,说的很详细,多谢了。
参考技术A Java源程序一般用java作为扩展名,是一个文本文件,用Java语言写成,可以用任何文本编辑器创建与编辑;编译源程序Java编译器,“javac”,读取你的Java源程序并翻译成Java虚拟机能够明白的指令集合,且以字节码的形式保存在文件中。通常,字节码文件以class作为扩展名;运行class(字节码)文件Java解释器读取字节码,取出指令并且翻译成计算机能执行的代码,完成运行过程 参考技术B 第一,编译器会生成了一个默认的无参数构造函数。第二,之所以输出ObjectInstance ,是自动调用了toString方法。追问
。
以上是关于java的一个小程序,帮我看看哪不对?的主要内容,如果未能解决你的问题,请参考以下文章
高手来帮我看看这个小程序啊?stack.push(i); 和!stack.empty()和stack.pop() + ""分别是啥意思啊
那个大哥能帮小弟做一下下面的题我做了不对,请用java和python帮我做一下我看看是那里不懂。