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帮我做一下我看看是那里不懂。

JAVA程序的几个小问题,有空的大神帮我看下谢谢啦~也可以让我给你发程序帮忙调一下万分感谢3QQQQQQ

java程序问题?

手机微信小程序拍的照片存在哪?

微信小程序制作JAVA语言支持写吗?