開発メモ/Java/基礎/継承
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*継承 [#xcf71d3e]
#contents
**継承について [#r3c7716c]
class クラス名1 extends クラス名2{
}
という記述で継承していきます。~
クラス名1はクラス名2のサブクラス、クラス名2はクラス名...
''継承のソースと継承の図''
#codeprettify{{
class x{
int i;
}
class x1 extend x{
int i2;
}
class x2 extend x1{
int i3;
}
class x3 extend x1{
int i4;
}
}}
x
x1のsuper class
x1がxを継承
↓
x1
xのsub class
x2とx3のsuper class
┌──┴──┐
↓ ↓
x2がx1を継承 x3がx1を継承
↓ ↓
x2 x3
x1のsub class x1のsub class
なので~
x2.i;
x4.i2;
x2.i3;
という値の参照が可能
----
継承関係にあるクラス内で同じ名前の変数がある場合、継承先...
隠された変数を参照したい場合はsuper.をつけると参照できる~
''継承のソースと継承の図''
#codeprettify{{
class x{
int i;
}
class x1 extend x{
int i2;
}
class x2 extend x1{
String i;
}
class x3 extend x1{
int i4;
}
}}
この場合、Xにi,x2にiがあります。~
しかし、x2はxを継承しています。継承先です。~
継承先の変数は継承元と同じ変数名のものを隠してしまうので
x2.iとやってもiはString型として扱われます。~
#codeprettify{{
class x1{
int i = 1;
}
class x2 extends x1{
int i = 2;
void display(){
System.out.println(i); //x2.iを参照して...
System.out.println(super.i); //こうすると、x2...
}
}
class mainprg{
public static void main(String args[]){
x2 xx = new x2();
xx.display();
}
}
}}
継承関係にあるなかで、メソッドがオーバーライドしている場...
型(引数とか)をみてメソッドを実行します。
#codeprettify{{
class a1{
void hello(){
System.out.println("hello! a1");
}
}
class b1 extends a1{
void hello(int i){
System.out.println("hello! b2");
}
}
class c1 extends b1{
void hello(){
System.out.println("hello! c2");
}
}
class hello_out{
public static void main(String args[]){
a1 obj new c1(String s);
obj.hello();
}
}
}}
といった場合、当てはまるものはb1のhelloメソッドです。~
a1,b1,c1のhelloメソッドがすべて
#codeprettify{{
void hello{
System.out.println("hello! メソッド名");
}
}}
で、上記のソースの場合はc1のhelloメソッドが呼び出されます。
**スーパークラスのコンストラクタの呼び出し [#zdbfc3cd]
継承関係にあるもののコンストラクタを呼ぶ場合、
スーパークラスのコンストラクタも呼ばなければなりません。~
スーパークラスのコンストラクタの呼び方は
super(引数:省略可);
です。~
スーパークラスのコンストラクタの呼び出しは、サブクラスの...
最初のステートメントで行わないといけません。~
先にスーパークラスのコンストラクタを呼び出すことによりコ...
終了行:
*継承 [#xcf71d3e]
#contents
**継承について [#r3c7716c]
class クラス名1 extends クラス名2{
}
という記述で継承していきます。~
クラス名1はクラス名2のサブクラス、クラス名2はクラス名...
''継承のソースと継承の図''
#codeprettify{{
class x{
int i;
}
class x1 extend x{
int i2;
}
class x2 extend x1{
int i3;
}
class x3 extend x1{
int i4;
}
}}
x
x1のsuper class
x1がxを継承
↓
x1
xのsub class
x2とx3のsuper class
┌──┴──┐
↓ ↓
x2がx1を継承 x3がx1を継承
↓ ↓
x2 x3
x1のsub class x1のsub class
なので~
x2.i;
x4.i2;
x2.i3;
という値の参照が可能
----
継承関係にあるクラス内で同じ名前の変数がある場合、継承先...
隠された変数を参照したい場合はsuper.をつけると参照できる~
''継承のソースと継承の図''
#codeprettify{{
class x{
int i;
}
class x1 extend x{
int i2;
}
class x2 extend x1{
String i;
}
class x3 extend x1{
int i4;
}
}}
この場合、Xにi,x2にiがあります。~
しかし、x2はxを継承しています。継承先です。~
継承先の変数は継承元と同じ変数名のものを隠してしまうので
x2.iとやってもiはString型として扱われます。~
#codeprettify{{
class x1{
int i = 1;
}
class x2 extends x1{
int i = 2;
void display(){
System.out.println(i); //x2.iを参照して...
System.out.println(super.i); //こうすると、x2...
}
}
class mainprg{
public static void main(String args[]){
x2 xx = new x2();
xx.display();
}
}
}}
継承関係にあるなかで、メソッドがオーバーライドしている場...
型(引数とか)をみてメソッドを実行します。
#codeprettify{{
class a1{
void hello(){
System.out.println("hello! a1");
}
}
class b1 extends a1{
void hello(int i){
System.out.println("hello! b2");
}
}
class c1 extends b1{
void hello(){
System.out.println("hello! c2");
}
}
class hello_out{
public static void main(String args[]){
a1 obj new c1(String s);
obj.hello();
}
}
}}
といった場合、当てはまるものはb1のhelloメソッドです。~
a1,b1,c1のhelloメソッドがすべて
#codeprettify{{
void hello{
System.out.println("hello! メソッド名");
}
}}
で、上記のソースの場合はc1のhelloメソッドが呼び出されます。
**スーパークラスのコンストラクタの呼び出し [#zdbfc3cd]
継承関係にあるもののコンストラクタを呼ぶ場合、
スーパークラスのコンストラクタも呼ばなければなりません。~
スーパークラスのコンストラクタの呼び方は
super(引数:省略可);
です。~
スーパークラスのコンストラクタの呼び出しは、サブクラスの...
最初のステートメントで行わないといけません。~
先にスーパークラスのコンストラクタを呼び出すことによりコ...
ページ名: