2020 |
07,14 |
//抽象クラス(抽象するクラスは具象クラスと言ったりする
//以下のクラスを継承するためにはabstractというきーわーぢをつけてあげればOK
abstract class User {
//sayHi()メソッドにもabstractをつけてあげると具象クラスの方で
//実装されなかった場合にエラーを返してくれます。
//このように具象クラスの方に実装を任せるメソッドを抽象メソッドと呼ぶ。
public abstract void sayHi()
}
class JapaneseUser extends User{
//sayHiメソッドをオーバーライドしているのがわかりやすいように
//アノテーションをかく!!
@Override
public void sayHi(){
System.out.println("こんにちは");
}
}
class AmerivanUser extends User{
//ここではsayHi()を実装しなかった場合にちゃんとエラーになるかも
//確かめてみるためにコメントアウトにしておきます!
//@Override
//public void sayHi(){
//System.out.println("こんにちは");
}
}
public final void sayHi() {
System.out.println("hi! " + this.name);
}
}
class AdminUser extends User {
public AdminUser(String name) {
super(name);
}
@Override
public void sayHi() {
System.out.println("[admin] hi! " + this.name);
}
}
public class MyApp {
public static void main(String[] args) {
User tom = new User("tom");
}
}
実行結果は↓
実行結果は↓
C:\Users\81801>javac -encoding utf-8 MyApp.java
MyApp.java:17: エラー: final Userからは継承できません
class AdminUser extends User {
^
MyApp.java:9: エラー: final変数VERSIONに値を代入することはできません
User.VERSION = 1.2;
^
MyApp.java:24: エラー: AdminUserのsayHi()はUserのsayHi()をオーバーライドできません
public void sayHi() {
^
オーバーライドされたメソッドはfinalです
エラー3個
C:\Users\81801>
PR
2020 |
07,14 |
«final_1»
// final: 変更ができない。オーバーライドされたメソッドがfinalだと
//値を変更することができない。
final class User {
protected String name;
private static final double VERSION = 1.1;
public User(String name) {
this.name = name;
User.VERSION = 1.2;
}
public final void sayHi() {
System.out.println("hi! " + this.name);
}
}
class AdminUser extends User {
public AdminUser(String name) {
super(name);
}
@Override
public void sayHi() {
System.out.println("[admin] hi! " + this.name);
}
}
public class MyApp {
public static void main(String[] args) {
User tom = new User("tom");
}
}
2020 |
07,14 |
«static_1»
staticを使ったやつ
class User {
private String name;
private static int count = 0;
public User(String name) {
this.name = name;
//インスタンス化するためにこちらのcountを1ずつふやしていく
//staticのフィールドに対してアクセスるにはクラス名を使えばいいので
//『User.count++;』のようにかいてあげるとよい
User.count++;
}
public static void getInfo() { // クラスメソッド
System.out.println("# of instances: " + User.count);
}
}
//mai()は特殊なメソッドではあるのですがJavaの仮想マシンがMyAppの
//インスタンスを作らずにいきなり実行できるようにstaticメソッドになっていると
//理解しておくといいでしょう。
public class MyApp {
public static void main(String[] args) {
User.getInfo(); // 0
User tom = new User("tom");
User.getInfo(); // 1
User bob = new User("bob");
User.getInfo(); // 2
}
}
2020 |
07,13 |
アクセス修飾子とは
public
protected
private
といった修飾子の総称でクラスやそのメンバーがどこからアクセス可能であるかを決定します。
それぞれの概要を下記に記載していきますと。
◆public
→すべてのクラスからアクセスできる
◆protected
→現在のクラスとサブクラスから書くセスできる
◆なし
→現在のクラスと同じパッケージのクラスからアクセスできる
◆private
→現在のクラスからだけアクセスできる!
まだなんとなくしかわからないけどとりあえず、いじょう!
public
protected
private
といった修飾子の総称でクラスやそのメンバーがどこからアクセス可能であるかを決定します。
それぞれの概要を下記に記載していきますと。
◆public
→すべてのクラスからアクセスできる
◆protected
→現在のクラスとサブクラスから書くセスできる
◆なし
→現在のクラスと同じパッケージのクラスからアクセスできる
◆private
→現在のクラスからだけアクセスできる!
まだなんとなくしかわからないけどとりあえず、いじょう!