这两个陈述有什么区别?

时间:2017-02-09 10:30:28

标签: java class interface

我使用两个语句创建对象,两者之间有什么区别吗?

public interface vehicle 
{
void accelerate () ;

}


class bmw  implements vehicle
{
void accelerate () 
{
System.out.println (" top speed of 300kmph " ) ; 
}
}

public class driver 
{
public static void main (String qw [] )  
{
vehicle v = new bmw () ; // statement 1 
v.accelerate () ;

bmw b = new bmw()  ; // statement 2 
b.accelerate() ;
} 

}

这两个陈述都给出了相同的输出,但我认为两者之间存在一些差异。

2 个答案:

答案 0 :(得分:3)

变量' y'它是私有的,因此您无法直接从您的子类访问它。 但您可以组织对此变量的访问,从而创建公共方法。

所以你什么时候打电话:

subclass.show ( 23 , 45 );

您无法直接访问' y' ' A'的属性但只能使用在其中使用的公共方法' y'。你可以这样做,因为它是A' A' A'类。

尝试更好地解释:

私有修饰符让您的属性在这种情况下无法从子类访问。所以你不能这样做:

 B b = new B();
 b.y = 10;

因为您无法直接访问此属性。 所以现在您可以定义子类如何使用公共方法访问此私有属性。最好的例子是getter或setter :(这个方法必须在你的超类中定义)

Public int getY(){
  Return this.y;
 }
Public void setY(int y){
  This.y = y;
 }

现在您可以访问私人属性' y'但你需要调用这个公共方法,所以现在你可以这样做:

B b = new B();
b.setY(10);

您将更改' y'。

的值

现在,根据你的代码,你没有制作任何setter或getter,但你定义了一个方法调用' show(int,int)'你在哪里改变' y'的价值。 这可能作为setter方法。 因此,您可以直接访问此方法,如:

B b = new B();
b.show(5,10);

因为它是一种公共方法。在此方法内部,您正在对私有属性执行操作。 所以,最后,私人属性' y'属于' A'超类并且不能由任何子类直接访问,但是您可以管理在superclasw中定义公共方法的操作,您可以在其中具体说明其他类如何访问超类私有属性。

  

我有这个疑问,因为y是一个私有变量,那么y如何属于对象的子类?

' Y'不属于子类。正如我之前所说,你可以访问私人'属性仅使用超类中定义的公共方法。所以,如果我想改变价值或显示' y'只有当超类中的公共方法改变或显示“' y”时,我才能做到这一点。值。

void show (int o ,int e )
{
   x=o ;      // I mean to say ,
   int y ;    // Is this implicitly declared above  ?

   y=e ;
   System.out.println(" x = " + x);
   System.out.println(" y = " + y);
}

在这里,你不需要声明' int y;'因为此方法是在超类中定义的,因此您可以直接访问' y'。

如果您需要更多请注释。

答案 1 :(得分:0)

是的,y将打印,因为y是本地的,并且在打印之前已经初始化。所以没有错误。

在第二个程序中,Y是A类的私有成员,并且在子类中不能直接访问。你已经创建了子类的对象,但你没有覆盖父类的show方法。所以父类的show方法意味着将执行一个类,你会找到Y.