如何在JAVA中使用Upcast对象访问父方法?

时间:2017-04-21 07:42:02

标签: java inheritance upcasting

我是Java的新手,对于Upcasting和Down-Casting产生了疑问。 我写了以下代码:

class Bike{
 int speedlimit=90;
 int bikeId = 123576;
  Bike(){  
  System.out.println("inside Bike");} //end constructor

 public void run(){ System.out.println("Bike is running");
   }// end run 

 };//end Bike 


class Honda3 extends Bike{
 int speedlimit=150;
 int bikeId = 456;

 Honda3(){    System.out.println("inside Honda");} //end constructor

 public void run(){ System.out.println("Honda is running");
 }// end run 

  public static void main(String args[]){
   Bike obj=new Honda3();
   System.out.println(obj.speedlimit);
   System.out.println(obj.bikeId);
   obj.run();
   Honda3 obj2 = (Honda3) obj;
   obj2.run();
   obj.run();
   }  // end main
 };//end honda3

输出:

inside Bike
inside Honda 
90
123576
Honda is running
Honda is running
Honda is running

当我创建Object obj时,它被上传到Parent Class Bike,它显示或描述在父类中声明的变量,而不是它本身。 但是它不会在父类中执行run方法,即自行车,但它仍然执行Honda3类中的运行方法。

所以我的疑问是,每当任何对象向其父类转发时,它是否会丢失其所有属性或变量?

为什么Upcast对象无法访问父方法,即使用以下内容?

`Bike obj = new Honda3(); // Output should be : Bike is Running` 

4 个答案:

答案 0 :(得分:0)

  

输出应该是:自行车正在运行

为什么呢?你的对象类型是本田,而不是自行车。

这是投票。

((Bike) obj).run()

尽管如此,我认为你要从本田班级致电super.run()而不是那种语法

可能更多信息:Why do we assign a parent reference to the child object in Java?

答案 1 :(得分:0)

调用对象的方法不是由变量的类型决定的,而是由对象的类型决定的,如果你是实例化的话,它将是Honda3。您无法从Bike is running实例获得输出Honda3

答案 2 :(得分:0)

关于将对象转换为父对象的第一个问题:

https://stackoverflow.com/a/16224294/6103979

关于运行super run()的第二个问题:

https://stackoverflow.com/a/1032906/6103979

答案 3 :(得分:0)

让我解释一下。

一个。 Bike obj=new Honda3();    在这里,您正在创建Honda3类而非Bike类的对象。因此obj的引用类型为Bike,对象类型为Honda3

B中。您的输出低于输出值,因为当您调用new Honda3()时,将调用Honda3的构造函数。默认construcor中的第一个语句始终是super()(它是Bike的构造者)。即使你没有把它,它也会被我的编译器。

inside Bike
inside Honda

℃。对字段的访问始终由静态类型确定。这与由实际对象的运行时类型确定的方法形成对比。换句话说,对于字段访问,编译器在编译时确定将要访问的内容。因此,这些值来自Bike

90
123576

d。为,

obj.run();
Honda3 obj2 = (Honda3) obj;
obj2.run();
obj.run();

你已经覆盖了Honda3中的run方法。所以它是一个运行时多态。由于对象类型为Honda3,这就是您看到的原因。

Honda is running
Honda is running
Honda is running

希望这有帮助!

相关问题