2017-02-09 140 views
-2

我使用两个语句创建对象,两者之间是否有区别?这两个陈述有什么区别?

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

} 

这两个陈述给出了相同的输出,但我认为这两者之间有一些区别。

+4

的可能的复制[有什么区别字段,变量,属性,以及属性在Java中的POJO之间?](http://stackoverflow.com/questions/10115588/what-is-the-difference-between-field-variable-attribute-and-property-in-java ) –

+0

是什么让你认为''y''属于子类? ''show''方法在''A''中定义。 – f1sh

回答

3

变量'y'它是私人的,所以你不能直接从你的子类访问它。 但是你可以组织访问这个变量来创建公共方法。

所以,当你打:

subclass.show (23 , 45); 

你不是直接访问到“A”级的“y”的属性,但只有在它定义的,你使用的是“Y”的公共方法。你可以做到这一点,因为它是'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'的值。

现在,根据yuor代码,您没有创建任何setter或getter,但是您定义了一个方法调用'show(int,int)',您正在更改'y'的值。 这很可能作为setter方法。因为它是一个公共方法

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

: 这样你就可以直接访问这个方法等。在这个方法里面,你正在对一个私有属性进行操作。 所以,最后,私有属性“Y”属于“A”超,不能由任何子类是直接访问,但你可以在superclasw,你具体怎么其他类可以访问父私有属性管理界定公共方法操作。

我有这个疑问,因为因为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'。

如果你需要更多信息,请发表评论。

+0

所以告诉我你想知道更多,所以我可以编辑和添加更有用的东西。 – Mike

+0

对于子类“Y”,它是超类的属性。它是私有的,所以子类不能直接访问它。 – Mike

+0

不是真的,因为当你做“y = e”时,你正在改变“y”的值,它是一个属性而不是局部变量。 – Mike

0

是,Y将b打印,因为y是本地和它在打印之前被初始化。所以没有错误。

在你的第二个方案,Y是A类的私有成员,这是不是在它的子类直接入店。您所做的子类的对象,但你有没有覆盖父class.So父类的方法,显示装置A类将被执行的显示方法,在那里你会发现Y.