java - 当在子类中声明一个父类中存在的变量后,自动调用的父类构造函数不起作用。
高洛峰
高洛峰 2017-04-18 10:46:33
0
3
550
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全員に返信(3)
左手右手慢动作

実行シーケンスは次のとおりです:

リーリー
  • A.iB.i はどちらもパッケージプライベートであり、B.i には A.i のオーバーライドがありません。この 2 つは独立していますの;A.iB.i 都是package-private的, B.i 没有Override A.i, 这两者是独立的;

  • A.setIB.setI 都是public, B.setI Override A.setI, A在构造时调用的是B.setI;

  • B在构造函数之外的成员初始化是在super()之后执行的, B.i先是在super里被B.setI设为60, 再被B的成员初始化设为10;


删除B中的int i = 10;之后, 如果A和B处于同一个package, B.setI访问的就是A.i

🎜A.setIB.setI は両方とも public、B.setIA.setI をオーバーライドします、A構築中に呼び出されるのは B.setI;🎜 🎜🎜コンストラクター外の B メンバーの初期化は super() の後に実行され、B.i は最初に super 内の B.setI を 60 に設定し、次にB のメンバーによって 10 に初期化されました;🎜 🎜B の int i = 10; を削除した後、A と B が同じパッケージ内にある場合、B.setIA.i にアクセスします。 ()、A.iは60に設定されていますが、どちらのプリントも60です🎜。
いいねを押す +0
黄舟

親クラスにすでに存在するメンバーをサブクラスで宣言した場合、エラーは発生しませんか?少なくとも警告であるべきです。

質問が悪すぎるとしか言えません。実際の開発ではこのように書くことは不可能です。自分で穴を掘ることになります。

いいねを押す +0
Ty80

7.10
1. Aの構築メソッドに進み、オブジェクトの空のパラメータの構築を完了します。
2.int I=7
3.setI(20) はサブクラスの setI() を呼び出します。このとき、サブクラスの I は 60 ですが、親クラスの I は 7 のままです。 this.i. この時点では、親クラスでは 7 です (注: 変数は実際の呼び出し元に依存します。これは現在の親クラスです。メソッドはオーバーライドされ、サブクラスを呼び出します)。 int I=10 は元の 60 をカバーします。
6、これを出力します。この時点では .i は 10 です。

60.60

注: サブクラスの I を削除すると、デフォルトで親クラスの I が呼び出されます

3. サブクラスの setI を呼び出して親クラスに代入します。このとき、親クラスは に変わります。 60.
5. 現時点ではカバレッジはありません。this.i はデフォルトで親クラスから継承した 60.
を呼び出します。
Degbugの重要性について...

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート