我使用两个语句创建对象,两者之间有什么区别吗?
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() ;
}
}
这两个陈述都给出了相同的输出,但我认为两者之间存在一些差异。
答案 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.