Java 抽象、扩展和创建实例问题
Java 抽象、扩展和创建实例问题,java,instance,abstract-class,abstract,extends,Java,Instance,Abstract Class,Abstract,Extends,Klasse1是一个抽象类,具有foo()方法Klasse2扩展了Klasse1并具有doo()方法,但不覆盖foo()方法 为什么我不能在Tester类中调用doo()方法 Klasse1.java public abstract class Klasse1 { public void foo() { System.out.println("Klasse1"); } } public class Klasse2 extends Klasse1 { pu
Klasse1
是一个抽象类,具有foo()
方法Klasse2
扩展了Klasse1
并具有doo()
方法,但不覆盖foo()
方法
为什么我不能在Tester
类中调用doo()
方法
Klasse1.java
public abstract class Klasse1 {
public void foo() {
System.out.println("Klasse1");
}
}
public class Klasse2 extends Klasse1 {
public void doo() {
System.out.println("Klasse2");
}
}
public class Tester {
public static void main(String[] args) {
Klasse1 k;
k = new Klasse2();
k.foo();
k.doo(); // doesn't work
}
}
Klasse2.java
public abstract class Klasse1 {
public void foo() {
System.out.println("Klasse1");
}
}
public class Klasse2 extends Klasse1 {
public void doo() {
System.out.println("Klasse2");
}
}
public class Tester {
public static void main(String[] args) {
Klasse1 k;
k = new Klasse2();
k.foo();
k.doo(); // doesn't work
}
}
Tester.java
public abstract class Klasse1 {
public void foo() {
System.out.println("Klasse1");
}
}
public class Klasse2 extends Klasse1 {
public void doo() {
System.out.println("Klasse2");
}
}
public class Tester {
public static void main(String[] args) {
Klasse1 k;
k = new Klasse2();
k.foo();
k.doo(); // doesn't work
}
}
在编译时,Java编译器检查引用类型而不是实例类型
在这种情况下,引用类型是
Klasse1
,它没有doo()
。因此,它将抛出一个错误。在编译时,Java编译器检查引用类型而不是实例类型
在这种情况下,引用类型是
Klasse1
,它没有doo()
。因此,它将抛出一个错误。Klasse1
没有doo
方法,因此它是自然的
您可以将其转换为您的Klasse2
,然后像这样使用:
((Klasse2)k).doo();
Klasse1
没有doo
方法,所以它很自然
您可以将其转换为您的Klasse2
,然后像这样使用:
((Klasse2)k).doo();
K
是类Klasse2
的对象,但引用为Klasse1
K
可以调用Klasse1
声明的所有方法,并且可以调用Klasse2
声明的所有方法(如果被强制转换到该类)
例子:
K
是类Klasse2
的对象,但引用为Klasse1
K
可以调用Klasse1
声明的所有方法,并且可以调用Klasse2
声明的所有方法(如果被强制转换到该类)
例子:
因为
Klasse1
没有doo()@雷曼嗯。。。有了所有的foo
和doo
,我就没有cloo
;)因为Klasse1
没有doo()@雷曼嗯。。。有了所有的foo
和doo
,我就没有cloo
;)谢谢这解决了我的问题!谢谢这解决了我的问题!