0

I have 3 questions and I would appreciate it if someone can explain it to me.

First of all,

Can an object belong to a class be assigned to a variable of a type that is a subclass without casting? If the answer is yes is casting required when assigning the object to a superclass? or did I just flipped them over?

Secondly, is it right that in an interface a method with a single parameter can accept as the argument value for that parameter objects from many different classes that are not related by inheritance? I will say yes to this question because the interface can be extended by different classes but I'm not sure if that's correct.

Finally, are methods inside a public class automatically defined public? or is it suppose to be defined as package?

4

2 回答 2

2

我没有明白你在第二个问题中的意思,所以我会发布你的第一个和第三个问题的答案,希望你能编辑你的问题并改写你的第二个问题。

1)不,这是不可能的。否则,可能会出现以下情况:

SomeInterface object1 = new Class1ImplementingInterface ();
Class2ImplementingInterface object2 = object1;    // Won't compile

上面这段代码无法编译。但是,如果您将其更改为:

SomeInterface object1 = new Class1ImplementingInterface ();
Class2ImplementingInterface object2 = (Class2ImplementingInterface) object1;    // Compiles, but will crash at runtime

它会编译,但会ClassCastException在运行时抛出一个。但是,可以将特定类的对象分配给父类/接口的对象而不进行强制转换。例如:

Class2ImplementingInterface object2 = new Class2ImplementingInterface ();
SomeInterface object1 = object2;    // OK

2)您的问题没有指定参数的类型是否为接口,这会有所不同。假设您专门要求接口,那么是的,带有参数的方法将接受参数类型或任何子类型的任何实例。例如

public void someMethod (SomeInterface parameter) {
    // Implementation
}

上面的代码将接受任何实现的类的对象SomeInterface。但是,如果参数的类型是类,则只接受同一类的对象或扩展此基类的任何类。

3) 不,成员、构造函数和方法的默认访问权限是package private,这意味着只有同一个包中的类才能访问这些。public您必须在要公开的成员上指定访问修饰符。

于 2013-09-23T23:17:13.973 回答
1
  1. 不,当你有一个类型的变量时A,你分配给它的任何东西都必须一个A。对A' 超类型的引用B不一定引用 'A'。这是相反的方式。

  2. 我想你要问的是:如果一个方法接受一个接口类型的参数,它会接受实现这个接口的各种类的实例,而这些类之间没有其他(继承)关系吗?答案是肯定的:只要它们实现了那个接口,它们就是合法的参数。

  3. 不,默认情况下它们具有包可见性

于 2013-09-23T23:31:55.827 回答