// Person クラス
public class Person {
// final修飾åã‚’æŒã¤ãƒ¡ã‚½ãƒƒãƒ‰
public final void displayInfo() {
System.out.println("å€‹äººæƒ…å ±ã‚’è¡¨ç¤ºã—ã¾ã™");
}
}
// Person クラスを継承ã—ãŸã‚µãƒ–クラス
public class Employee extends Person {
// オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—よã†ã¨ã—ã¦ã‚‚コンパイルエラーãŒç™ºç”Ÿã™ã‚‹
// final修飾åã‚’æŒã¤ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã§ããªã„
// @Override
// public void displayInfo() {
// System.out.println("従æ¥å“¡æƒ…å ±ã‚’è¡¨ç¤ºã—ã¾ã™");
// }
}
ã“ã®ä¾‹ã§ã¯ã€Personクラスã®displayInfoメソッドã«final修飾åãŒä»˜ã„ã¦ã„ã¾ã™ã€‚ãã®ãŸã‚ã€Employeeクラスã§ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—よã†ã¨ã™ã‚‹ã¨ã€ã‚³ãƒ¡ãƒ³ãƒˆã‚¢ã‚¦ãƒˆã•れãŸéƒ¨åˆ†ã®ã‚ˆã†ã«ã‚³ãƒ³ãƒ‘イルエラーãŒç™ºç”Ÿã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€final修飾åãŒãƒ¡ã‚½ãƒƒãƒ‰ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã‚’ç¦æ¢ã™ã‚‹åŠ¹æžœãŒç¢ºèªã§ãã¾ã™ã€‚
finalメソッド
finalメソッドã¯ã€ãã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã§ããªã„ã“ã¨ã‚’示ã™ä¿®é£¾åã§ã™ã€‚final修飾åãŒä»˜ã„ãŸãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã‚µãƒ–クラスã§åŒã˜åå‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’定義ã—ã¦ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。ã“れã«ã‚ˆã‚Šã€ã‚¯ãƒ©ã‚¹ãƒ‡ã‚¶ã‚¤ãƒ³ã®å®‰å®šæ€§ã‚’確ä¿ã—ã€ã‚µãƒ–クラスãŒç‰¹å®šã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’変更ã§ããªã„よã†ã«ã—ã¾ã™ã€‚
以下ã¯ã€finalメソッドã®åŸºæœ¬çš„ãªç‰¹å¾´ã¨ä½¿ç”¨ä¾‹ã§ã™ã€‚
- オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ç¦æ¢:
final修飾åãŒä»˜ã„ãŸãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã‚µãƒ–クラスã§ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã§ãã¾ã›ã‚“。ã“れã«ã‚ˆã‚Šã€è¦ªã‚¯ãƒ©ã‚¹ã§ç‰¹å®šã®æŒ¯ã‚‹èˆžã„ã‚’æŒã¤ãƒ¡ã‚½ãƒƒãƒ‰ãŒã€ã‚µãƒ–クラスã«ã‚ˆã£ã¦å¤‰æ›´ã•れるã“ã¨ã‚’防ãŽã¾ã™ã€‚ - 安定性ã®ç¢ºä¿:
finalメソッドã¯ã€ãã®ã‚¯ãƒ©ã‚¹ã®æŒ™å‹•を安定ã•ã›ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚クラスã®ä½œè€…ãŒç‰¹å®šã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒå¤‰æ›´ã•れãªã„よã†ã«ã—ãŸã„å ´åˆã«ã€finalãƒ¡ã‚½ãƒƒãƒ‰ãŒæœ‰ç”¨ã§ã™ã€‚
以下ã¯ã€finalメソッドã®ä¾‹ã§ã™ã€‚
public class Parent {
// finalメソッド
public final void finalMethod() {
System.out.println("This is a final method in the Parent class.");
}
}
public class Child extends Parent {
// コンパイルエラーãŒç™ºç”Ÿã™ã‚‹ãŸã‚コメントアウト
// @Override
// public void finalMethod() {
// System.out.println("This method cannot be overridden in the Child class.");
// }
}
上記ã®ä¾‹ã§ã¯ã€Parentクラスã®finalMethodメソッドãŒfinal修飾åã‚’æŒã£ã¦ã„ã¾ã™ã€‚ãã®ãŸã‚ã€Childクラスã§åŒã˜åå‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—よã†ã¨ã™ã‚‹ã¨ã€ã‚³ãƒ³ãƒ‘イルエラーãŒç™ºç”Ÿã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€finalメソッドãŒã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã§ããªã„ã“ã¨ãŒç¢ºèªã§ãã¾ã™ã€‚
メソッド以外ã«ä½¿ã‚れるfinal修飾å
final修飾åã¯ã€ãƒ¡ã‚½ãƒƒãƒ‰ã ã‘ã§ãªãã€ä»–ã®è¦ç´ ã«ã‚‚é©ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã¯ã€ãƒ¡ã‚½ãƒƒãƒ‰ä»¥å¤–ã§ã®final修飾åã®è§£èª¬ã§ã™ã€‚
フィールド (変数):
クラスã®ãƒ•ィールド(メンãƒå¤‰æ•°ï¼‰ã«final修飾åを付ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãã®ãƒ•ィールドã®å€¤ãŒä¸€åº¦è¨å®šã•れãŸã‚‰å¤‰æ›´ã§ããªããªã‚Šã¾ã™ã€‚
public class MyClass {
// finalフィールド
public final int constantValue = 10;
public void modifyValue() {
// コンパイルエラーãŒç™ºç”Ÿã™ã‚‹ãŸã‚コメントアウト
// constantValue = 20;
}
}
上記ã®ä¾‹ã§ã¯ã€constantValueã¯final修飾åã‚’æŒã£ã¦ã„ã‚‹ãŸã‚ã€ä¸€åº¦è¨å®šã•れãŸå€¤ï¼ˆã“ã“ã§ã¯10)ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。
クラス:
final修飾åã¯ã‚¯ãƒ©ã‚¹è‡ªä½“ã«ã‚‚é©ç”¨ã§ãã¾ã™ã€‚final修飾åãŒä»˜ã„ãŸã‚¯ãƒ©ã‚¹ã¯ç¶™æ‰¿ã§ãã¾ã›ã‚“。ã“れã¯ã€ãã®ã‚¯ãƒ©ã‚¹ã®æ©Ÿèƒ½ã‚„デザインを変更ã§ããªã„よã†ã«ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚
// finalクラス
public final class FinalClass {
// クラスã®å†…容
}
上記ã®ä¾‹ã§ã¯ã€FinalClassã¯final修飾åã‚’æŒã£ã¦ã„ã‚‹ãŸã‚ã€ä»–ã®ã‚¯ãƒ©ã‚¹ã¯ã“れを継承ã§ãã¾ã›ã‚“。
ãƒãƒ¼ã‚«ãƒ«å¤‰æ•°:
メソッド内ã®ãƒãƒ¼ã‚«ãƒ«å¤‰æ•°ã«ã‚‚final修飾åを使用ã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€å¤‰æ•°ãŒä¸€åº¦åˆæœŸåŒ–ã•れãŸå¾Œã«å†ä»£å…¥ã§ããªããªã‚Šã¾ã™ã€‚
public class MyClass {
public void exampleMethod() {
// finalãƒãƒ¼ã‚«ãƒ«å¤‰æ•°
final int localVar = 5;
// コンパイルエラーãŒç™ºç”Ÿã™ã‚‹ãŸã‚コメントアウト
// localVar = 10;
}
}
上記ã®ä¾‹ã§ã¯ã€localVarã¯final修飾åã‚’æŒã£ã¦ã„ã‚‹ãŸã‚ã€åˆæœŸåŒ–後ã«å†ä»£å…¥ã§ãã¾ã›ã‚“。
ã“れらã®ä¾‹ã¯ã€final修飾åãŒç•°ãªã‚‹ã‚³ãƒ³ãƒ†ã‚ストã§ä½¿ç”¨ã•れる方法を示ã—ã¦ã„ã¾ã™ã€‚
「014 継承ã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント