为了账号安全,请及时绑定邮箱和手机立即绑定

新人求教java小问题

public class Vehicle{
  public int site;
  public void test(){
    System.out.println("site:"+site);
    }
}//父类
public class Car extends Vehicle{
  public int site=5;
}//子类
public static void main(String[] args) {
  Vehicle v=new Car();
  v.test();
}

想请问为什么这时候输出的是 site:0

先实例化再赋值就不会这样,那如果我就像让它输出我本身就赋好的值,这段程序该怎么改

正在回答

6 回答

public static void main(String[] args) {

  Vehicle v=new() Car;

  v.test();

}

在主函数中你创建的是父类Vehicle 的对象,调用的是父类的方法,而在父类中site没有赋值所以默认为0啊,

子类继承父类的方法,首先在子类中把test方法写上,然后再main方法中创建子类的实例,再去调用子类中的test方法就可以了。

1 回复 有任何疑惑可以回复我~
#1

yymooc

还有如果Vehicle v=new() Car;是你创建的对象的话,写法也是错误的,创建父类应该是Vehicle v=new Vehicle();
2015-02-05 回复 有任何疑惑可以回复我~
#2

Agnoy 提问者 回复 yymooc

这个地方是笔误... 受教了
2015-02-05 回复 有任何疑惑可以回复我~
#3

Agnoy 提问者

非常感谢!受教
2015-02-05 回复 有任何疑惑可以回复我~

因为你子类没有重写test()函数,如果你把父类的那个函数复制到子类中,


其他不做改变,那么结果就是子类的数值了。


其实老师说的重点不是这个,而是主要想说多态这个概念。


下面用例子解释为什么视频要用父类引用指向子类对象,也就是实现多态。


程序功能:当交通方式为空运时,输出该交通方式可搭乘人数。


假设你不知道多态时,你会怎么完成以上功能。

/*/////////////////////////////////////////////////////*/

public class Main {


    public static void main(String[] args) {


         Transport transport;//Transport为交通工具父类

         

         transport=new Car();//Car为子类

         

         transport=new Boat();

        

         transport=new Plane();

          

    

         if(transport.getMeans().equals("airTransport")){ //getMean()得到交通方式


             System.out.println("numOfPeople:"+transport.getNum());


        }

    }


}

/*////////////////////////////////////////////////////*/


以上代码使用了多态。


即视频里老师说的用父类的引用指向子类对象可以方便的实现该功能。


可是你如果不知道多态,就只能直接用子类引用指向子类对象即


Car car=new Car();Boat boat=new Boat();Plane plane=new Plane();


然后你要去怎么比较呢?难道写三段


if(car.getMeans.equals("airTransport"))


if(boat.getMeans.equals("airTransport"))


if(plane.getMeans.equals("airTransport"))


才能判断得出结果吗?这也太麻烦了。


这时候多态的作用就体现出来了,父类引用会自动地指向不同子类对象,


自动调用各子类对象的重写方法进行比较,这样就方便多了。


现在可以体会到多态的作用了吧。


ps:自己的一点理解,有错误欢迎指出。





1 回复 有任何疑惑可以回复我~
#1

Agnoy 提问者

谢谢指教!
2015-02-12 回复 有任何疑惑可以回复我~
#2

MoreClass

父类引用子类对象时,对象的名字可以相同是么?
2015-03-30 回复 有任何疑惑可以回复我~
#3

罗英河 回复 MoreClass

对呀 父类引用指向子类对象时,引用的名字(就是你说的对象的名字)可以相同,不然的话,如果不相同,那不是还是要一个个写出来,比如transport1,transport2,transport3, 这样的话不就没有多态效果了。
2015-04-18 回复 有任何疑惑可以回复我~

//父类

public class Vehicle {

public int site;

 public void test(){

   System.out.println("site:"+site);

   }

}

//子类

public class Car extends Vehicle {

public int site=5;

public void test(){

   System.out.println("site:"+site);

   }

}

//测试类

public class Intial {


public static void main(String[] args) {

// TODO Auto-generated method stub

Car car = new Car();

car.test();

}


}

要想输出子类的site值,就要调用子类的方法,首先在main中创建子类的对象,如下:

Car car = new Car();

car.test();


0 回复 有任何疑惑可以回复我~
#1

Agnoy 提问者

谢谢了
2015-02-05 回复 有任何疑惑可以回复我~

可以再说清楚点吗?  谢谢

0 回复 有任何疑惑可以回复我~

v.test();   //运行父类方法输出父类值          

System.out.println(v.site);    //运行实例化的子类方法,输出子类变量值

1 回复 有任何疑惑可以回复我~
#1

有一种爱叫KNA

33232
2015-02-05 回复 有任何疑惑可以回复我~
#2

Agnoy 提问者

可以再说清楚点吗? 谢谢
2015-02-05 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       530553    人
  • 解答问题       6091    个

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

进入课程

新人求教java小问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信