解答編8
「クラス定義」
 
← 前  :  次 →

問1の解答.
次に示す解答例では

という技術要素を盛り込んでいるのがポイントです.

「this」というキー・ワードが何かを調べてみてください.

「MyBook.java」

public class MyBook {
	// fields
	private String name;
	private String author;
	private MyDateOfIssue date;
	// -
	private String comment;
	private int bookmark;

	// constructors
	public MyBook() {
		this("","",0,0);
	}

	public MyBook(String name,String author) {
		this(name,author,0,0);
	}

	public MyBook(String name,String author,int year,int month) {
		this.name=name;
		this.author=author;
		date=new MyDateOfIssue(year,month);
		// -
		comment="";
		bookmark=0;
	}

	// mthods
	public void setName(String name) {
		this.name=name;
	}

	public String getName() {
		return name;
	}

	public void setAuthor(String author) {
		this.author=author;
	}

	public String getAuthor() {
		return author;
	}

	public void setDate(int year,int month) {
		date=new MyDateOfIssue(year,month);
	}

	public String getDate() {
		return date.getIssue();
	}

	public void setComment(String comment) {
		this.comment=comment;
	}

	public String getComment() {
		return comment;
	}

	public void setBookmark(int bookmark) {
		this.bookmark=bookmark;
	}

	public int getBookmark() {
		return bookmark;
	}


	// inner class
	private class MyDateOfIssue {
		// fields
		private int year;
		private int month;

		// constructors
		public MyDateOfIssue() {
			this(0,0);
		}

		public MyDateOfIssue(int year,int month) {
			this.year=year;
			this.month=month;
		}

		// methods
		public void setYear(int year) {
			this.year=year;
		}

		public int getYear() {
			return year;
		}

		public void setMonth(int month) {
			this.month=month;
		}

		public int getMonth() {
			return month;
		}

		public String getIssue() {
			return year+"/"+month;
		}
	}
}


問2の解答.
次に示す解答例では

という技術要素を盛り込んでいるのがポイントです.

「super」というキー・ワードが何かを調べてみてください.

「MyLibraryBook.java」

public class MyLibraryBook extends MyBook {
	// fields
	private boolean isRental;

	// constructors
	public MyLibraryBook() {
		this("","",0,0,false);
	}

	public MyLibraryBook(String name,String author) {
		this(name,author,0,0,false);
	}

	public MyLibraryBook(String name,String author,int year,int month) {
		this(name,author,year,month,false);
	}

	public MyLibraryBook(String name,String author
		,int year,int month,boolean isRental) {

		super(name,author,year,month);
		this.isRental=isRental;
	}

	// mthods
	public void setRentable(boolean isRental) {
		this.isRental=isRental;
	}

	public boolean isRentable() {
		return isRental;
	}
}

どうですか? クラスの定義方法は,「なんとなく」で良いですが,わかりましたか? それに加えて,継承が使えることの ありがたみ は感じることができましたか?

 

Java では C++ のような多重継承はできません. それに代わる手法は存在します. それは仕様の複雑さを避けるためですが,単一継承だけでも非常に有益です.

オブジェクト指向言語としての真髄(言い過ぎ?)が,ココにあります.


表紙へ戻る