java - 抽象类如何访问子类的方法?
问题描述
abstract class zagazuga{
zagazuga(){
System.out.println("yaratıldı");
dosomething();
}
abstract void dosomething();
public void lale(){
System.out.println("what");
}
}
public class lagaluga extends zagazuga {
lagaluga(){
dosomething();
}
@Override
void dosomething() {
System.out.println("nebu");
}
@Override
public void lale() {
super.lale();
}
public static void main(String[] args) {
lagaluga asd = new lagaluga();
asd.lale();
}
}
我知道对象不是从抽象类创建的,但是当抽象类给出构造函数时,当我从子类创建对象时,首先调用抽象类的构造函数。其实抽象类的对象是创建出来的,让我想到这个的就是我在子类中重写的methodmethod的body中的super.lale();我无法弄清楚 super 是否指的是上层阶级的对象。如果课程是普通课程,我有一个答案,但奇怪的是这发生在抽象中。有人可以解释它是如何发生的
解决方案
没有超类的(附加)实例。
子类的实例包括超类的成员(字段和方法)——它是超类的扩展。
示例:Ford
是Car
;的子类 每个Car
都有一个马达,所以Ford
也有一个
提示:无需申报
public void lale() {
super.lale();
}
如果未声明(覆盖),则将调用超类中的方法
使用发布的代码,new lagaluga()
将创建一个实例,如:
lagaluga asd = +---------------------+
| (class Object) | // read as members of Object
| <init> |
| boolean equals |
| int hashCode |
| String toString |
| ... |
| - - - - - - - - - - |
| (class zagazuga) |
| <init> |
| void lale |
| - - - - - - - - - - |
| (class lagaluga) |
| <init> |
| void dosomething |
| void lale |
+---------------------+
(Object
包含在所有实例中,任何类的顶级父级)
(<init>
对应于构造函数)
该实例具有其类、其父级、其祖父级(如果有)的所有成员(字段、方法),...,对象。IS 的实例lagaluga
也是zagazuga
(带有附加方法)的实例。
构造函数作为实例创建的一部分被调用(在分配内存之后)。每个构造函数调用其父构造函数直到构造函数Object
(没有父构造)。详细信息:JLS 12.5。创建新的类实例
上面的图片对于字段来说会更好,对于方法来说不是很精确 - 方法不会在每个实例中复制,它们只是类定义的一部分。
推荐阅读
- java - -D 在 -Dwebdriver.chrome.driver 中是什么意思
- android - 在 Manifest 中设置 Boolean extra
- amazon-web-services - AWS CodeDeploy 需要两个目标组,但为什么呢?
- oracle - 数据库级别的 DDL 触发器
- cmake - 无法在 CLion 中使用随 VCPKG 安装的库
- python - Python:我需要创建一个具有特定规范的随机 NxN 矩阵
- python - 从 youtube 视频中提取音频
- blender - Blender 2.8 snap,刀工具不能正常工作
- c++ - 最小硬币变化 - 动态规划
- c - 为什么我可以像这样将值传递给 printf C 函数?