// Animal クラスã®å®šç¾©
class Animal {
// protected 修飾åã‚’æŒã¤ name インスタンス変数
protected String name;
// コンストラクタ:name ã‚’è¨å®šã™ã‚‹
public Animal(String name) {
this.name = name;
}
// name ã‚’å–å¾—ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰
protected String getName() {
return name;
}
}
// Dog クラス:Animal クラスを拡張
class Dog extends Animal {
// Dog クラスã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿
public Dog(String name) {
// 親クラスã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã‚’呼ã³å‡ºã—
super(name);
}
// Dog ã®åå‰ã‚’è¨å®šã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰
public void setDogName(String name) {
// name ã‚’è¨å®š
this.name = name;
}
}
// Cat クラス:Animal クラスを拡張
class Cat extends Animal {
// Cat クラスã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿
public Cat(String name) {
// 親クラスã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã‚’呼ã³å‡ºã—
super(name);
}
// Cat ã®åå‰ã‚’è¨å®šã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰
public void setCatName(String name) {
// name ã‚’è¨å®š
this.name = name;
}
}
// メインクラス
public class Main {
public static void main(String[] args) {
// Dog インスタンスã®ç”Ÿæˆ
Dog myDog = new Dog("ãƒãƒ‡ã‚£");
// メッセージã®è¡¨ç¤ºã¨ Dog ã®å…ƒã®åå‰ã‚’å–å¾—
System.out.println("犬ã®å…ƒã®åå‰: " + myDog.getName());
// 犬ã®åå‰ã‚’変更
myDog.setDogName("マックス");
// メッセージã®è¡¨ç¤ºã¨çŠ¬ã®æ›´æ–°å¾Œã®åå‰ã‚’å–å¾—
System.out.println("çŠ¬ã®æ›´æ–°å¾Œã®åå‰: " + myDog.getName());
// Cat インスタンスã®ç”Ÿæˆ
Cat myCat = new Cat("ウィスカーズ");
// メッセージã®è¡¨ç¤ºã¨ Cat ã®å…ƒã®åå‰ã‚’å–å¾—
System.out.println("猫ã®å…ƒã®åå‰: " + myCat.getName());
// 猫ã®åå‰ã‚’変更
myCat.setCatName("ミトンズ");
// メッセージã®è¡¨ç¤ºã¨çŒ«ã®æ›´æ–°å¾Œã®åå‰ã‚’å–å¾—
System.out.println("çŒ«ã®æ›´æ–°å¾Œã®åå‰: " + myCat.getName());
}
}
Animalクラスã¯ã€å‹•物を表ã™åŸºæœ¬çš„ãªã‚¯ãƒ©ã‚¹ã§ã™ã€‚protected修飾åã‚’æŒã¤nameã¨ã„ã†ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹å¤‰æ•°ã‚’æŒã¡ã€ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã¨getNameメソッドãŒå®šç¾©ã•れã¦ã„ã¾ã™ã€‚
Dogクラスã¯Animalクラスを拡張ã—ã¦ã„ã¾ã™ã€‚Dogクラス自体ã¯ã€å‹•物ã®ä¸€ç¨®ã§ã‚る犬を表ã—ã¾ã™ã€‚setDogNameメソッドã«ã‚ˆã£ã¦ã€çЬã®åå‰ã‚’è¨å®šã§ãã¾ã™ã€‚ã“ã®ã‚¯ãƒ©ã‚¹ã§ã¯ã€è¦ªã‚¯ãƒ©ã‚¹ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã‚’super(name)ã¨ã—ã¦å‘¼ã³å‡ºã—ã¦ã„ã¾ã™ã€‚
CatクラスもAnimalクラスを拡張ã—ã¦ã„ã¾ã™ã€‚Catクラスã¯ã€å‹•物ã®ä¸€ç¨®ã§ã‚る猫を表ã—ã¾ã™ã€‚setCatNameメソッドã«ã‚ˆã£ã¦ã€çŒ«ã®åå‰ã‚’è¨å®šã§ãã¾ã™ã€‚åŒæ§˜ã«ã€è¦ªã‚¯ãƒ©ã‚¹ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã‚’呼ã³å‡ºã—ã¦ã„ã¾ã™ã€‚
Mainクラスã¯ã€å®Ÿéš›ã®ä½¿ç”¨ä¾‹ã‚’示ã—ã¦ã„ã¾ã™ã€‚DogãŠã‚ˆã³Catã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’生æˆã—ã€ãれãžã‚Œã®åå‰ã‚’表示ã—ã¾ã™ã€‚setNameメソッドを通ã˜ã¦ã€åå‰ã‚’変更ã—ã€å†ã³è¡¨ç¤ºã—ã¦ã„ã¾ã™ã€‚
protected修飾å
protected修飾åã¯ã€Javaã«ãŠã‘るアクセス修飾åã®ä¸€ã¤ã§ã‚りã€ã‚¯ãƒ©ã‚¹ãƒ¡ãƒ³ãƒãƒ¼ï¼ˆãƒ•ィールドやメソッド)をåŒã˜ãƒ‘ッケージ内ã®ã‚¯ãƒ©ã‚¹ã‚„ã€ãã®ã‚¯ãƒ©ã‚¹ã‚’継承ã—ãŸã‚µãƒ–クラスã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ã«ã—ã¾ã™ã€‚以下ã«ã€protected修飾åã®ä¸»ãªç‰¹å¾´ã¨ä½¿ç”¨æ³•ã«ã¤ã„ã¦è§£èª¬ã—ã¾ã™ã€‚
- åŒã˜ãƒ‘ッケージ内ã‹ã‚‰ã®ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ï¼š
protected修飾åã‚’ã¤ã‘ãŸãƒ¡ãƒ³ãƒãƒ¼ã¯ã€åŒã˜ãƒ‘ッケージ内ã®ã‚¯ãƒ©ã‚¹ã‹ã‚‰ã¯é€šå¸¸ã®ã‚¢ã‚¯ã‚»ã‚¹ä¿®é£¾åã¨åŒæ§˜ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚
- サブクラスã‹ã‚‰ã®ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ï¼š
protected修飾åã‚’ã¤ã‘ãŸãƒ¡ãƒ³ãƒãƒ¼ã¯ã€ã‚¯ãƒ©ã‚¹ã‚’継承ã—ãŸã‚µãƒ–クラスã‹ã‚‰ã‚‚アクセスå¯èƒ½ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€ç¶™æ‰¿é–¢ä¿‚ã«ã‚るクラスã§å…±æœ‰ã•れるメンãƒãƒ¼ã‚’指定ã§ãã¾ã™ã€‚
- クラス外ã‹ã‚‰ã®ã‚¢ã‚¯ã‚»ã‚¹ã¯åˆ¶é™ï¼š
protected修飾åã‚’ã¤ã‘ãŸãƒ¡ãƒ³ãƒãƒ¼ã¯ã€åŒã˜ãƒ‘ッケージ内ã§ãªã„ã‹ã¤ç¶™æ‰¿é–¢ä¿‚ã«ãªã„クラスã‹ã‚‰ã¯ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“。クラス外ã‹ã‚‰ã¯ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„ãŸã‚ã€ä¸€å®šã®æƒ…å ±ã®éš 蔽(カプセル化)ãŒä¿ãŸã‚Œã¾ã™ã€‚
- フィールドやメソッドã«é©ç”¨å¯èƒ½ï¼š
protected修飾åã¯ãƒ•ィールドやメソッドã«é©ç”¨ã§ãã¾ã™ã€‚例ãˆã°ã€è¦ªã‚¯ãƒ©ã‚¹ã®ãƒ•ィールドをåクラスã§åˆ©ç”¨ã™ã‚‹å ´åˆã‚„ã€è¦ªã‚¯ãƒ©ã‚¹ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹å ´åˆã«ä½¿ç”¨ã•れã¾ã™ã€‚
以下ã¯ã€protected修飾åを使用ã—ãŸä¾‹ã®ä¸€éƒ¨ã§ã™ï¼š
// 親クラス
class Animal {
// protected 修飾åã‚’æŒã¤ãƒ•ィールド
protected String name;
// protected 修飾åã‚’æŒã¤ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿
protected Animal(String name) {
this.name = name;
}
// protected 修飾åã‚’æŒã¤ãƒ¡ã‚½ãƒƒãƒ‰
protected void eat() {
System.out.println(name + " is eating.");
}
}
// åクラス
class Dog extends Animal {
// åクラスã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿
public Dog(String name) {
// 親クラスã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã‚’呼ã³å‡ºã—
super(name);
}
// 親クラスã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰
@Override
protected void eat() {
System.out.println(name + " the dog is eating.");
}
}
ã“ã®ä¾‹ã§ã¯ã€Animalクラスã®nameフィールドã¨eatメソッドãŒprotected修飾åã‚’æŒã£ã¦ã„ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€DogクラスãŒAnimalクラスを継承ã—ã€nameフィールドã¨eatメソッドを利用ã§ãã¾ã™ã€‚
「014 継承ã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント