快速提问,我正在学习接口和继承。
这不是实际的代码,只是一个例子。假设我有抽象类“动物”。对马和犬类等组有一些继承。还有一个接口“宠物”。它将用于动物的不同子类。犬类“狗”的子类实现了接口“宠物”。因此“狗”的所有子类也实现了接口“宠物”,而不必在“狗”的每个子类上单独实现“宠物”,对吗?
不
接口定义了类的外观(最低限度)。无论是在基类中还是在最低的子类中实现这一点都无关紧要。
接口必须在整个子类和基类的层次结构中完全实现,并且必须在接口实现签名所在的级别定义(实现接口)。
子类本身不知道接口,但它们通过其基类具有隐式连接。
因为我是个善良的人:
public class Test {
public static void main(String[] args) {
BaseClass obj = new SubClass();
obj.test();
obj.test2();
SomeInterface obj2 = new SubClass();
obj2.test();
obj2.test2();
}
}
interface SomeInterface {
public void test();
public void test2();
}
abstract class BaseClass implements SomeInterface {
@Override
public abstract void test();
@Override
public void test2() {
try {
System.out.println(Arrays.toString(this.getClass().getMethod("test2", null).getDeclaringClass().getInterfaces()));
} catch (NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class SubClass extends BaseClass {
@Override
public void test() {
try {
System.out.println(Arrays.toString(this.getClass().getMethod("test", null).getDeclaringClass().getInterfaces()));
} catch (NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
输出:
[]
[interface SomeInterface]
[]
[interface SomeInterface]
如您所见,它表明
test()
(在SubClass
中实现)不返回任何已实现的接口,而test2()
(在BaseClass
中实现)确实表明接口是由该类实现的。抽象类可以通过将定义标记为抽象
来允许从它们实现的接口中实现方法以在子类中实现。
正如您在main方法中所看到的那样,将对象定义为基类(BaseClass)或SomeInterface(SomeInterface)都是有效的,没有任何区别。
如果您有:
abstract class StaffMember implements MyInterface
哪里
interface MyInterface {
void myMethod();
}
然后所有扩展Staff会员的类都将继承MyInterface类型,您将能够在MyInterface实例作为操作数/参数的代码的其他部分中通过此基类型引用它们,例如:
void otherMethod(MyInterface param) { //... }
接口MyInterface的实际实现可以在抽象类中进行,也可以在扩展抽象类的任何类中进行。重要的是,在这种情况下,myMethod()是在继承层次结构中的某个地方指定的,这样JVM就可以找到它的定义来调用。
我有一个父类和子类、和,它们描述了如何购买水果的不同类型。 在篮子里插入购买的特定水果; 计算购买水果的总价值; 计算用于给定类型水果(水果名称)的总金额 为了与其他项目的类兼容,在各个类中使用的执行要支付金额的计算的方法将具有名称payFruit,返回类型double并且没有参数。此方法必须在接口中声明。 注意:我知道这可能对我的情况很特殊,对其他人没有太大帮助,但我发现这个类层次结构在使用时有
问题内容: 快速问题,我正在学习有关接口和继承的知识。 这不是实际的代码,仅是示例。假设我有抽象类Animal。马,犬等团体有一定的继承权。还有一个“宠物”界面。它将用于Animal的不同子类。犬“狗”的子类实现接口“宠物”。因此,“狗”的所有子类也都实现了“宠物”接口,而不必在“狗”的每个子类上单独实现“宠物”,对吗? 问题答案: 如果你有: 哪里 那么所有扩展StaffMember的类都将继承
问题内容: 我读过一个子类不能继承私有字段或方法。但是,在这个例子中 运行时,输出为。似乎是从继承了private属性。 所以,请解释这里发生了什么。谢谢。 问题答案: 子类具有其超类的字段,但不能直接访问它们。同样,子类“具有”私有方法,但是您不能直接从子类中调用或重写它们。 在有关继承的Java文档中,它说 子类并 没有 继承父类的私有成员。 但是,我认为将其视为 子类继承其父类的私有成员,但
问题内容: 这是一个面试问题。 子类是否继承私有字段? 我回答“否”,因为我们无法使用“常规OOP方式”访问它们。但是访问者认为它们是继承的,因为我们可以间接或使用反射来访问这些字段,并且它们仍然存在于对象中。 回来后,我在javadoc中找到了以下引号: 超类私人成员 子类不继承其父类的私有成员。 你知道面试官的观点有什么论据吗? 问题答案: 这里的问题/答案中的大多数困惑都围绕着继承的定义。
问题内容: 接口是否从 Java中的类继承? 如果否,那么我们如何在接口实例上调用对象类的方法 问题答案: 接口是否从 Java中的类继承? 不,他们没有。而且,就这一点而言,也不存在所有接口都隐式继承的通用“根”接口(与类一样)。() 如果否,那么我们如何在接口实例上调用对象类的方法 接口为中的每个公共方法隐式声明一个方法。因此,该方法被隐式声明为接口中的成员(除非它已经从超级接口继承了该方法)
我尝试了下面的代码,根据它,我理解内部类继承到OuterClass的子类。是正确的吗? 输出除外: 2. 奥特你好。内部的 当这行代码运行时,它应该意味着内部类被继承给了ChildClass 我很困惑,因为我在链接上发现了下面的语句 当外部类由其子类扩展时,成员内部类将不会继承到子类。若要在外部类的子类内使用内部类属性,子类还必须具有内部类,并且该内部类必须扩展外部类的内部类。