新人求教java小问题

来源:10-1 Java 中的多态

Agnoy

2015-02-05 13:43

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

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

写回答 关注

5回答

  • yymooc
    2015-02-05 15:15:23
    已采纳

    public static void main(String[] args) {

      Vehicle v=new() Car;

      v.test();

    }

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

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

    Agnoy

    非常感谢!受教

    2015-02-05 17:24:02

    共 3 条回复 >

  • 罗英河
    2015-02-10 01:23:20

    因为你子类没有重写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:自己的一点理解,有错误欢迎指出。





    罗英河 回复MoreCl...

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

    2015-04-18 11:28:56

    共 3 条回复 >

  • yymooc
    2015-02-05 18:19:53

    //父类

    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();


    Agnoy

    谢谢了

    2015-02-05 20:10:18

    共 1 条回复 >

  • Agnoy
    2015-02-05 17:24:37

    可以再说清楚点吗?  谢谢

  • Rober_Lin
    2015-02-05 15:06:58

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

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

    Agnoy

    可以再说清楚点吗? 谢谢

    2015-02-05 17:25:15

    共 2 条回复 >

Java入门第二季 升级版

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

530558 学习 · 6091 问题

查看课程

相似问题