JAVA中创建抽象类的对象变量,指向他的非抽象子类是什麽意思?
发布网友
发布时间:2022-05-19 02:38
我来回答
共3个回答
热心网友
时间:2024-03-03 09:57
你说的应该是这样的一种情况:
人 a = new 张三();
这里面“人”是一个抽象类,有些方法比如“吃饭”都已经实现了,而有些方法比如“获取名字“、”获取样子”等没有实现;“张三”是人的子类,是一个非抽象类,实现了所有方法。
这里的a可以说是抽象类人的变量,指向的是张三这个非抽象类。
我们可以用抽象类定义变量,但实例化的时候必须用非抽象类。就比如我们写计划的时候可以说今年安排多少“人”进修,每天多少“人”打扫卫生等,说的很抽象。但是具体执行的时候是必须指明到底安排的是谁。
先说到这,你要是还有什么不明白的话就追问吧,给我发信也行。
============
我看你问到内存的东西了,我可以再给你解释一下,我还是注意答案的质量的:)
看这条语句:A a = new AA();
先看A a,这只是在栈里面创建一个4字节的指针变量。
new AA;这条语句是在堆里面开辟AA类型的空间,这个空间里面存放的是AA所包含的以及继承的所有非静态变量,不包含方法代码。(方法代码在方法区,虚拟机第一次见到AA时就会加载进去,注意第一次就会,而且仅仅一次)
AA();这条语句是调用AA的构造方法AA()
= 是赋值,把开辟的堆空间首地址赋给指针a。
明白么:)??追问差不多明白了。。涉及到再深点的感觉我的大脑就理解不能了,这个对象a里边的变量是AA的变量和他继承自A的变量,然后调用A和AA的构造函数对他进行赋值?是这个意思吧?谢谢了啊
热心网友
时间:2024-03-03 09:57
抽象类时不能实例化(创建对象的),所以要实例化该类型的对象必须创建他的子类,
----------------------------------------------------------------------------------------------
比如 public abstract class Father 和 public class Son extends Father
那么如果你声明一个变量 Father f;
你要在其他行实例化这个对象,你不能这样做 f=new Father();因为抽象类不能创建实例,
但是你可以这样做 f=new Son();
----------------------------------------------------------------------------------------------
上面这段代码,就是解释‘JAVA中创建抽象类的对象变量,指向他的非抽象子类’。
其实这也是叫做向下转型,声明Father类型,创建Son实际类型。希望对你有用。追问这个我明白 其实我想问的是就像你说的 Father f=new Son();这句话编译是可以通过的
那他是怎么具体实现的?这个对象f是Father类的还是son类的,开辟的内存里存放的又是son类的变量和方法和son继承father类的变量还是只是father类的 问题补充了好几次都没显示出来 谢谢你上次的回答 希望再解答一下
热心网友
时间:2024-03-03 09:58
抽象类不能直接实例化, 必须实现抽象类才能实例化 。
“指向他的非抽象子类是什麽意思” 这句不明白 !!