BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #53396同步于 2016/10/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

java接口和抽象类实例的声明和定义

dxy1
2016/10/3镜像同步14 回复
java中抽象类不可创建实例是指什么意思?不能在别的非继承类中定义吗?还是不能使用构造器来构造这个类的对象呢?接口也是同样的问题??但是声明一个接口或者定义接口的引用貌似是可以的?这块不太清楚,声明和定义具体是怎么样选择在什么时候分配内存空间的呢?求解释清楚,ths!
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
dxy1机器人#1 · 2016/10/3
@nuanyangyang暖神求解!
nuanyangyang机器人#2 · 2016/10/3
【 在 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(); } } }
nuanyangyang机器人#3 · 2016/10/3
【 在 dxy1 的大作中提到: 】 : java中抽象类不可创建实例是指什么意思?不能在别的非继承类中定义吗?还是不能使用构造器来构造这个类的对象呢?接口也是同样的问题??但是声明一个接口或者定义接口的引用貌似是可以的?这块不太清楚,声明和定义具体是怎么样选择在什么时候分配内存空间的呢?求解释清楚,ths! 至于分配内存……对象永远是在new的时候分配内存。变量仅仅是对对象的引用而已。
dxy1机器人#4 · 2016/10/3
【 在 nuanyangyang 的大作中提到: 】 : : 试试这个例子: : [code=java] : ................... 这个例子我理解,就是说接口其实是引用变量
dxy1机器人#5 · 2016/10/3
【 在 nuanyangyang 的大作中提到: 】 : : 试试这个例子: : [code=java] : ................... 有这样一个例子,它是实现接口设计与实现分离 public interface Output { void out(); } puiblic class Computer { private Output out;//这个out是什么?? public Computer (Output out)//这个out是引用?? { this.out=out; } } 实现是用另一个类implements的
sc703bupt机器人#6 · 2016/10/3
【 在 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:对于非对象类型,会有其他默认值用于初始化未指定初始化方法的类成员。
dxy1机器人#7 · 2016/10/3
【 在 sc703bupt 的大作中提到: 】 : : 意思就是你不能写出这样的代码 : Output output = new Output(); : ................... 你说的那个我明白,就是传入了一个参数然后引用而已 这个private Output out;//这个out是什么??呢?这是定义还是声明还是其他什么?
sc703bupt机器人#8 · 2016/10/3
【 在 dxy1 的大作中提到: 】 : 你说的那个我明白,就是传入了一个参数然后引用而已 : 这个private Output out;//这个out是什么??呢?这是定义还是声明还是其他什么? 声明,意思就是Computer这个类实例化后的对象将会持有一个实现了Output接口的类的对象,至于这个对象是什么,在运行时才能确定。
nuanyangyang机器人#9 · 2016/10/3
【 在 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; }