基本的java代码来理解继承

时间:2015-04-25 07:44:11

标签: java inheritance polymorphism

为什么Sub BordersB() Application.ScreenUpdating = False Dim lngLstCol As Long, lngLstRow As Long lngLstRow = ActiveSheet.UsedRange.Rows.Count lngLstCol = ActiveSheet.UsedRange.Columns.Count With Range(Range("B7"), Cells(lngLstRow, 2)).Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Range(Range("B7"), Cells(7, lngLstCol)).Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Range(Cells(7, lngLstCol), Cells(lngLstRow, lngLstCol)).Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Range(Cells(lngLstRow, 2), Cells(lngLstRow, lngLstCol)).Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With Application.ScreenUpdating = True End Sub 会打印以下内容:

System.out.println(b.h + " " + b.getH());

我期待它打印出这样的东西:

Beta 44 <br/>
4 44          (notice this is in the second line)

我认为以这种方式打印的原因是因为我们首先调用4 Beta 44 44 (this one is in one line) 这是4.然后我们调用b.h来打印Beta 44 44

以下是代码:

b.getH()

7 个答案:

答案 0 :(得分:2)

输出是因为var内的表达式首先计算然后打印。 所以订单是

System.out.println(b.h + " " + b.getH());

所以完整的o / p是

System.out.println(b.h + " " + b.getH());  // calls getH() method
System.out.println("Beta " + h);           //print Beta 44
System.out.println(b.h + " " + b.getH());  //prints 4 44

Beta 44 4 44 b.h,因为变量未被引入,因此它通过引用调用4h变量。
Baap为您提供从b.getH()类方法返回的44值(在Beta类中h = 44)。

答案 1 :(得分:1)

首先,对getH()的调用打印“Beta 44”,因为在调用System.out.println(b.h + " " + b.getH())之前评估println的参数。

然后System.out.println(b.h + " " + b.getH())打印“4 44”。

b.h返回4因为没有覆盖实例变量,并且由于b的编译时类型为Baapb.h会返回实例超类的变量。

b.getH()会返回44,因为b的运行时类型为Beta,会覆盖getH()

答案 2 :(得分:1)

System.out.println(b.h +&#34;&#34; + b.getH());

按以下顺序执行:

String temp1 = b.h
String temp2 = temp1 + " "
String temp3 = b.getH () // prints Beta 44
String temp4 = temp2 + temp3
System.out.println (temp4) // prints 4 44

答案 3 :(得分:1)

输出

  

Beta 44

     

4 44

要评估表达式System.out.println(b.h + " " + b.getH());方法b.getH()需要首先进行评估。由于对象实际上是类Beta,您在第1行中看到Beta 44打印[由于您使用的是println方法,因此最后会有一个新的行符号],该方法返回44 。

然后它就像System.out.println(b.h + " " + 44);

一样简单

现在,因为您只是直接使用类型为Baap的引用引用变量,您将获得4 [记住变量不会被覆盖,它们只是被遮蔽]。因此第二行4 44

答案 4 :(得分:1)

它首先在println()语句中计算表达式,因为Beta44首先打印出来。然后它从println语句开始从左到右打印值,然后打印4,44。它打印4因为实例变量是Baap类型(编译时)。因此,它选择Baap类中定义的变量值。 如果父类和子类中都存在相同的方法,则仅从子类调用重写的方法。但是,变量和静态字段是从实例变量类型调用的,在这种情况下是Baap。

希望它会有所帮助。

答案 5 :(得分:0)

它给出了绝对正确的答案

Beta 44 
4 44

此声明:System.out.println(b.h + " " + b.getH());

由于程序计数器或编译器从右到左检查了一个语句,并且在println()方法中,programm计数器首先识别出并且弄明了方法的参数,因为它先行b.getH()  所以"Beat 44"是答案的第一部分,之后它会为println()获取一个新行,最后它会打印b.h值(4),然后返回{{1}的值这是44。

答案 6 :(得分:0)

这是因为使用了相同的重写方法。当使用重写方法时,该类将优先使用自己的方法而不是父类的方法。