V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  movq  ›  全部回复第 24 页 / 共 83 页
回复总数  1657
1 ... 20  21  22  23  24  25  26  27  28  29 ... 83  
2022-11-17 22:08:40 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
@AerithLoveMe

我觉得父类不应该调用子类重写的方法,是因为我觉得这就把父类子类搅和在一起,破坏类的封装性了。

构造函数是给自己初始化的,父类他又不知道别的类写的是什么代码,怎么敢在构造函数里使用别的类的方法来初始化自己?

不过 Java 确实是这样的特性,因为它初始化父类时子类已经存在了,虚函数表里面的函数就是子类的函数。
2022-11-17 20:28:56 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
@ediron 你还是把 Java 多态解释了一遍。但这里问题的核心是构造函数调用虚函数时 Java 和 C++的区别。你可以看 47 楼怎么说的。
2022-11-17 20:25:54 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
@jiangzm 关于你说的这句话,“没两把刷子”有可能是对的,因为我确实正在学 Java ,正在学当然水平不高了。但你说的“那啥”想表达什么呢?我发这个帖子是怎么着恶心你了吗?不能问问题是吧?不知道哪来的恶意
2022-11-17 20:20:20 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
@jiangzm 哦,你是不是想说我没水平?那你的证据呢?——还是说,凡是你说的都是对的,所以不需要证据?
2022-11-17 20:18:38 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
@jiangzm 听不懂你想表达什么
2022-11-17 19:24:30 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
@psycho9631 C++在父类构造函数完成之前子类对象还不存在,所以和 Java 不一样
2022-11-17 19:23:28 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
@helloworld1024 完全赞同你的观点
2022-11-17 19:12:16 +08:00
回复了 movq 创建的主题 程序员 new A().new B()这个是什么 Java 语法
@westoy `class_.new Inner();`这种语法叫什么呢
2022-11-17 17:52:19 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
@liprais 你说的是对的
2022-11-17 17:52:08 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
@zsdroid 你说的是对的
2022-11-17 17:16:36 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
@hsfzxjy 1 和 3
2022-11-17 17:15:59 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
@lisongeee 你举的这个例子和我这个帖子完全无关
2022-11-17 16:35:07 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
@wangxiaoaer 他都没看懂我在问什么,有什么好多看几遍的。
2022-11-17 16:33:44 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
@GuuJiang 我说的是哪一步不成立呢?

```cpp
class Parent {

public:
Parent() {
print();
}

void virtual print() {
std::cout << "parent" << std::endl;
}
};

class Child : public Parent {

public:
Child() {
print();
}

void print() {
std::cout << "child" << std::endl;
}
};

int main() {
Parent *p = new Child();
p->print();
return 0;
}
```

执行结果

parent
child
child
2022-11-17 15:22:56 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
@whileFalse C++里面用父类指针调用方法调用的结果是子类的方法,但是在父类内部调用被重写的方法,调用的仍然是父类自身的方法
2022-11-17 15:09:11 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
@leonshaw 父类调用一个他认为自己已经有的方法,结果调用到子类去了。假设父类的这个方法里面的逻辑和父类本身的内容有关,这个方法将不会达到预期效果。所以 C++的方式更好。这里面没有说抽象方法。如果是抽象方法那都应该是调用 overrider
2022-11-17 14:01:29 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
觉得 C++的更符合直觉一些。
2022-11-17 14:00:53 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
C++的继承是这样的:

```c++
class Parent {

public:
Parent() {
print();
}

void print() {
std::cout << 10 << std::endl;
}
};

class Child : public Parent {

public:
Child() {
print();
}

void print() {
std::cout << 20 << std::endl;
}
};

int main() {
Parent *p = new Child();
return 0;
}
```
输出结果为
10
20

也就是说父类就调用父类的 print ,子类就调用子类的 print
2022-11-15 10:58:36 +08:00
回复了 movq 创建的主题 程序员 有没有 Java 大佬分析这是什么错误
@mind3x 按照

```lang=java
Arrays.sort(boxTypes, Comparator.<int[]>comparingInt(a -> a[1]).reversed());
```

这种写法则 IDEA 和 javac 都不报错
1 ... 20  21  22  23  24  25  26  27  28  29 ... 83  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   911 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 24ms · UTC 19:53 · PVG 03:53 · LAX 11:53 · JFK 14:53
Developed with CodeLauncher
♥ Do have faith in what you're doing.