【发布时间】:2014-12-04 12:44:53
【问题描述】:
我是 Java 新手,我已经阅读了无法实例化抽象类的线程 (here)。所以,我测试了一下。
我做的第一个测试如下所示。看起来我实际上可以实例化一个抽象类,实际上,我实际上有一个新的 type 引用抽象类,并且该类型实际上由扩展它的所有子类共享。这也意味着适用多态性。
import java.util.*;
abstract class AbstractClass{
public abstract void printname();
}
class Test1 extends AbstractClass{
private String name;
public Test1(String name){
this.name = name;
}
public void printname(){
System.out.println("My name is " + name);
}
}
class Test2 extends AbstractClass{
private String saysomething;
public Test2(String saysomething){
this.saysomething = saysomething;
}
public void printname(){
System.out.println(saysomething);
}
}
class TestingApp{
public static void main(String[] args){
AbstractClass[] abstractclass_list = {new Test1("JEFFFFFF") , new Test2("Hey , say something")};
for(AbstractClass item : abstractclass_list){
item.printname();
}
}
}
然后我又做了一个测试,但这一次,我决定创建一个引用接口的类型,而不是抽象类。似乎我也可以实例化一个接口。我实际上可以创建一个引用接口的 type。此类型由实现此接口的所有类共享。并且多态性再次适用。
import java.util.*;
interface AbstractInterface{
public void printname();
}
class Test4 implements AbstractInterface{
private String name;
public Test4(String name){
this.name = name;
}
public void printname(){
System.out.println("My name is " + name);
}
}
class Test3 implements AbstractInterface{
private String saysomething;
public Test3(String saysomething){
this.saysomething = saysomething;
}
public void printname(){
System.out.println(saysomething);
}
}
class TestingAbstractInterfaceApp{
public static void main(String[] args){
AbstractInterface[] abstract_list = {new Test4("Helen") , new Test3("Hey , say my name")};
for(AbstractInterface item : abstract_list){
item.printname();
}
}
}
问题:
我感觉到我在代码中所做的事情有问题。但是我不能完全解释为什么代码在理论上仍然可以工作,不可能实例化一个抽象类和接口。我实际上是在上面显示的示例中实例化一个抽象类和一个接口吗?因为这似乎正是我所做的,因为我有一个新的抽象类和接口类型。请纠正我,如果我的逻辑是错误的或者我使用了错误的词。
更新: 所以我想我的误解是关于type。我一直认为类型只能指普通的Java类,不能指抽象类和接口。 “类型”实际上是如何工作的?它是在创建参考吗?
【问题讨论】:
标签: java oop interface abstract-class