class A extends B
{
public static void main(String[] args)
{
B obj = new A();
obj.speak(); //error :the method speak() undefined for type B
}
public void speak()
{
System.out.println("in speak");
}
}
class B {
}
我是java初学者,我不理解这行代码是什么意思 平均值。为什么不能访问自己的方法。请详细解释如果类A正在实例化,那么为什么它的方法不可访问。
以下语句B obj=new A();
表示两件事。
>
obj
声明为B
类型的对象。
obj
由A
定义。
换句话说,您可以像使用任何其他B
对象一样使用obj
。通过将其类型声明为B
,您限制编译器仅使用该透视图(以及B
的超类)。
那么使用A
定义obj
是什么意思?
使用A的构造函数来构建obj将导致构造A的每个超类(从第一个父类开始),并且每次定义方法时,它们都会覆盖由其超类定义的方法。
成员变量/静态字段只会覆盖超类的变量/静态字段,这意味着通过切换透视图,您可以访问不同的字段。然而,重要的是要记住,这些方法将始终是由定义它们的最后一个子类定义的方法。
代码示例
public class Example
{
public static void main(String[] args)
{
Animal animal = new Animal();
System.out.println(animal.name);
animal.makeSound();
Animal doggy = new Dog();
System.out.println(doggy.name);
doggy.makeSound();
}
}
public class Animal {
public String name;
public Animal() {
name = "NameLess";
}
public void makeSound() {
System.out.println("What am I?");
}
}
public class Dog extends Animal {
public Dog() {
name = "Goofy";
}
public void makeSound() {
System.out.println("woof woof!");
}
}
该示例的输出将为:
NameLess
What am I?
Goofy
woof woof!
无法使用下面的行从子类访问方法, 假设我在子类中有一个方法,而父类中没有相同的方法。在这种情况下,我们无法使用上述代码行访问子类方法print()。但是请注意,如果我们在父类中有相同的方法,那么我们可以使用上面的代码访问它。 可能没有这样的现实生活场景,但试图理解为什么我无法访问子类使用类型为父的子对象,如果我们没有在父类中定义相同的方法。 示例代码如下: 更多解释——如果我在父类中定义了方法,那
我有一个 但当我这么做的时候, 我该怎么解决这个问题?游戏是超级超级类...
在java中,我们可以缩小返回类型和throws异常类型(甚至删除throws子句): 但是,参数类型呢(如果A采用< code>T,那么为什么B不采用< code >?超级T)如: 让我们考虑一下我认为完全符合逻辑的这段代码: 所以我要说的是,在使用的代码上下文中仍然有效。
我见过子类的构造器方法被用于具有超类类型的变量。例如: 是类型对象还是类型?由于类inherit from,因此它的方法可能比它的超类多。实例调用这些函数是否只能存在于中,而不能存在于中?在这种情况下,和可以互换吗?例如:
问题内容: 我有一个扩展其超类的子类的对象。子类中有一个重写的方法,可以使用对象调用该方法。可以使用子类对象调用超类的函数吗? 考虑上面的代码。 它在这里打印 子类去 。相反,我必须打印 超类去 。 问题答案: 不,这是不可能的,如果您认为需要,请重新考虑您的设计。覆盖方法的全部要点是替换其功能。如果一个不同的类对该类的内部工作非常了解,那么您将完全取消封装。
问题内容: 嗨,我想知道我的问题是否有简单的解决方案, 我有一个: 它们都实现一个方法- 调用时飞。我知道我可以使用此方法访问超类的通用方法和属性 很好-但是现在我想访问子类具有的方法。我可以通过将as 强制转换为: 在我的情况下,我不想这样做,因为这意味着我对的每个子类型都有3套上述代码。 似乎有点多余,是否有更好的方法? 问题答案: 实际上,从超类执行此操作不是一个好方法,因为每个子类的行为都