返回信息流java中抽象类不可创建实例是指什么意思?不能在别的非继承类中定义吗?还是不能使用构造器来构造这个类的对象呢?接口也是同样的问题??但是声明一个接口或者定义接口的引用貌似是可以的?这块不太清楚,声明和定义具体是怎么样选择在什么时候分配内存空间的呢?求解释清楚,ths!
这是一条镜像帖。来源:北邮人论坛 / java / #53396同步于 2016/10/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
java接口和抽象类实例的声明和定义
dxy1
2016/10/3镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 dxy1 的大作中提到: 】
: @nuanyangyang暖神求解!
试试这个例子:
interface Speakable {
void speak();
}
class Cat implements Speakable {
@Override public void speak() { System.out.println("喵"); }
}
class Dog implements Speakable {
@Override public void speak() { System.out.println("汪"); }
}
public class Main {
public static void main(String[] args) {
Speakable[] things = { new Cat(), new Dog() };
for (Speakable thing : things) {
thing.speak();
}
}
}
【 在 dxy1 的大作中提到: 】
: java中抽象类不可创建实例是指什么意思?不能在别的非继承类中定义吗?还是不能使用构造器来构造这个类的对象呢?接口也是同样的问题??但是声明一个接口或者定义接口的引用貌似是可以的?这块不太清楚,声明和定义具体是怎么样选择在什么时候分配内存空间的呢?求解释清楚,ths!
至于分配内存……对象永远是在new的时候分配内存。变量仅仅是对对象的引用而已。
【 在 nuanyangyang 的大作中提到: 】
:
: 试试这个例子:
: [code=java]
: ...................
这个例子我理解,就是说接口其实是引用变量
【 在 nuanyangyang 的大作中提到: 】
:
: 试试这个例子:
: [code=java]
: ...................
有这样一个例子,它是实现接口设计与实现分离
public interface Output {
void out();
}
puiblic class Computer {
private Output out;//这个out是什么??
public Computer (Output out)//这个out是引用??
{
this.out=out;
}
}
实现是用另一个类implements的
【 在 dxy1 的大作中提到: 】
: 有这样一个例子,它是实现接口设计与实现分离
: public interface Output {
: void out();
: ...................
: java中抽象类不可创建实例是指什么意思?
意思就是你不能写出这样的代码
Output output = new Output();
直观上也很好理解的,这个接口里的out()方法没有具体定义,因此实例化它没有意义。然而你可以在任意地方声明这个类型的引用,正如你例子里写的:在实例化Computer的时候,可以传入某个实例化了Output
class myOutput implements Output {...}
Computer computer = new Computer(new myOutput());
至于内存的空间分配和初始化,JVM会遵循一定的规则进行,笼统的说是先静态后非静态,对于有初始化的类成员则进行相应的初始化,如果没有(如private Output output),则会初始化成null。PS:对于非对象类型,会有其他默认值用于初始化未指定初始化方法的类成员。
【 在 sc703bupt 的大作中提到: 】
:
: 意思就是你不能写出这样的代码
: Output output = new Output();
: ...................
你说的那个我明白,就是传入了一个参数然后引用而已
这个private Output out;//这个out是什么??呢?这是定义还是声明还是其他什么?
【 在 dxy1 的大作中提到: 】
: 你说的那个我明白,就是传入了一个参数然后引用而已
: 这个private Output out;//这个out是什么??呢?这是定义还是声明还是其他什么?
声明,意思就是Computer这个类实例化后的对象将会持有一个实现了Output接口的类的对象,至于这个对象是什么,在运行时才能确定。
【 在 dxy1 的大作中提到: 】
: 有这样一个例子,它是实现接口设计与实现分离
: public interface Output {
: void out();
: ...................
private Output out;//这个out是什么??
public Computer (Output out)//这个out是引用??
{
this.out=out;
}
这样写代码对于不熟练的人来说容易误解。其实等价于这个:
private Output myOut;//这个是引用
public Computer (Output yourOut)//这个也是引用
{
this.myOut = yourOut;
}