対象向け復習(二)
11761 ワード
コードブロック
概要Javaでは{}で囲まれたコードをコードブロックと呼ぶ.コードブロック分類は,その位置と宣言によって局所コードブロック,構築コードブロック,静的コードブロック,同期コードブロック(マルチスレッド説明)に分けられる.一般的なコードブロックの適用ローカルコードブロックは方法に現れる.変数のライフサイクルを限定し、早期に解放し、メモリ利用率を高めてコードブロックを構築し、クラス内の方法外に現れる.複数の構造方法方法のうち同じコードは一緒に格納され、構造が呼び出されるたびに実行され、構造方法の前に静的コードブロックがクラス内の方法外に現れ、static修飾がクラス内の方法外に現れ、static修飾が加わる.クラスを初期化するために使用され、ロード時に実行され、メインメソッドより先に実行され、一度だけ実行されます.ドライバのロード
Extendsの継承
継承の利点はコードの多重性を高め、コードのメンテナンス性を高め、クラスとクラスの関係を生み出し、多態の前提継承の弊害クラスの結合性が継承の特徴を強化し、単一継承をサポートし、多層継承をサポートする.ただし、マルチ継承はサポートされていません.このシステムのすべての機能を使用して最下位のクラスでオブジェクトを作成したい場合は、このシステムの共通機能を見たい場合は、最上位のクラス継承の注意事項を見てください.サブクラスは、親クラスの非プライベートメンバー(メンバーメソッドとメンバー変数)のすべてのサブクラスが親クラスの構造方法を継承できないことしかできません.ただしsuper(すぐに)キーワードで親構造メソッドにアクセスできます.一部の機能のために継承しないで、いつ継承を使うかは実は1つの関係を体現しています:“is a”.2つのクラスAがあれば、B.彼らがAがBの一種であるか,あるいはBがAの一種であるかに合致する限り,継承を用いることが考えられる.
これとsuperの違いはメンバー変数を呼び出します.メンバー変数は、本クラスのメンバー変数を呼び出すもよいし、親クラスのメンバー変数superを呼び出すもよい.メンバー変数呼び出し親クラスのメンバー変数呼び出し構造方法this(...)このクラスの構築方法superを呼び出す(...)親クラスの構築メソッドを呼び出すメンバーメソッドthis.メンバーメソッドは、本クラスのメンバーメソッドを呼び出すか、親クラスのメソッドsuperを呼び出すことができる.メンバーメソッド親クラスのメンバーメソッドを呼び出すには、なぜサブクラス内のすべての構築メソッドがデフォルトで親クラスの中空パラメータの構築メソッドにアクセスするのですか?子クラスは親のデータを継承するため、親のデータも使用する可能性があります.したがって、サブクラスを初期化する前に、必ず親データの初期化を完了します.実は、各コンストラクションメソッドの最初の文のデフォルトは、super()親が空のコンストラクションを持っていない場合、super()にパラメータを追加してコンストラクションにアクセスする注意です.super(...)またはthis(...)空のパラメータの最初の文に表示する必要があります
メソッド書き換え子クラスに親クラスの機能が必要で、機能主体の子クラスに独自の内容がある場合、親クラスのメソッドを書き換えることができます.これにより,親クラスの機能を踏襲し,子クラス特有の内容を定義する.メソッド書き換え注意親のプライベートメソッドは書き換えることができません.親プライベートメソッドの子クラスが子クラス書き換え親メソッドを継承できない場合、アクセス権限を低くすることはできません.親の静的メソッドを一致させることが望ましいです.子クラスも静的メソッドで書き直さなければなりません.これはメソッド書き換えとは言えませんが、現象は確かにそうです.メソッド書き換えとは言えない理由については、(静的には静的のみを上書きする)サブクラス書き換え親メソッドについて説明します.同じように宣言したほうがいいです.
方法書き直しの面接問題OverrideとOverloadの違いは?Overloadは戻り値のタイプを変更できますか?overloadは戻り値タイプを変更し、パラメータリストメソッドのみを見て書き換えることができます.サブクラスには、親クラスのメソッド宣言と同じメソッドが表示されます.メソッドの再ロード:このクラスに表示されるメソッド名と同様に、パラメータリストが異なるメソッド.戻り値には関係ありません.サブクラスオブジェクト呼び出しメソッドの場合:サブクラス自体を探してから親を探します
finalキーワード
マルチステート
多態は物事の存在の多様な形態である.
マルチステートの前提
マルチステートの3つの前提1、継承2、書き換え3がある場合、親参照はサブクラスオブジェクトのマルチステートでのコンパイルと実行メンバー変数を指します:コンパイルは左を見て、実行は左を見て、コンパイルは左を見て、実行は右を見て(動的バインド)静的メンバー方法:コンパイルは左を見て、実行は左を見て静的メンバー方法は上書きされていないという説は静的でないメンバー方法だけです.コンパイル左(親)実行右(子)
抽象クラス
インタフェース
メンバーの内部クラス
静的内部クラス
ローカル内部クラス
概要Javaでは{}で囲まれたコードをコードブロックと呼ぶ.コードブロック分類は,その位置と宣言によって局所コードブロック,構築コードブロック,静的コードブロック,同期コードブロック(マルチスレッド説明)に分けられる.一般的なコードブロックの適用ローカルコードブロックは方法に現れる.変数のライフサイクルを限定し、早期に解放し、メモリ利用率を高めてコードブロックを構築し、クラス内の方法外に現れる.複数の構造方法方法のうち同じコードは一緒に格納され、構造が呼び出されるたびに実行され、構造方法の前に静的コードブロックがクラス内の方法外に現れ、static修飾がクラス内の方法外に現れ、static修飾が加わる.クラスを初期化するために使用され、ロード時に実行され、メインメソッドより先に実行され、一度だけ実行されます.ドライバのロード
Extendsの継承
継承の利点はコードの多重性を高め、コードのメンテナンス性を高め、クラスとクラスの関係を生み出し、多態の前提継承の弊害クラスの結合性が継承の特徴を強化し、単一継承をサポートし、多層継承をサポートする.ただし、マルチ継承はサポートされていません.このシステムのすべての機能を使用して最下位のクラスでオブジェクトを作成したい場合は、このシステムの共通機能を見たい場合は、最上位のクラス継承の注意事項を見てください.サブクラスは、親クラスの非プライベートメンバー(メンバーメソッドとメンバー変数)のすべてのサブクラスが親クラスの構造方法を継承できないことしかできません.ただしsuper(すぐに)キーワードで親構造メソッドにアクセスできます.一部の機能のために継承しないで、いつ継承を使うかは実は1つの関係を体現しています:“is a”.2つのクラスAがあれば、B.彼らがAがBの一種であるか,あるいはBがAの一種であるかに合致する限り,継承を用いることが考えられる.
これとsuperの違いはメンバー変数を呼び出します.メンバー変数は、本クラスのメンバー変数を呼び出すもよいし、親クラスのメンバー変数superを呼び出すもよい.メンバー変数呼び出し親クラスのメンバー変数呼び出し構造方法this(...)このクラスの構築方法superを呼び出す(...)親クラスの構築メソッドを呼び出すメンバーメソッドthis.メンバーメソッドは、本クラスのメンバーメソッドを呼び出すか、親クラスのメソッドsuperを呼び出すことができる.メンバーメソッド親クラスのメンバーメソッドを呼び出すには、なぜサブクラス内のすべての構築メソッドがデフォルトで親クラスの中空パラメータの構築メソッドにアクセスするのですか?子クラスは親のデータを継承するため、親のデータも使用する可能性があります.したがって、サブクラスを初期化する前に、必ず親データの初期化を完了します.実は、各コンストラクションメソッドの最初の文のデフォルトは、super()親が空のコンストラクションを持っていない場合、super()にパラメータを追加してコンストラクションにアクセスする注意です.super(...)またはthis(...)空のパラメータの最初の文に表示する必要があります
メソッド書き換え子クラスに親クラスの機能が必要で、機能主体の子クラスに独自の内容がある場合、親クラスのメソッドを書き換えることができます.これにより,親クラスの機能を踏襲し,子クラス特有の内容を定義する.メソッド書き換え注意親のプライベートメソッドは書き換えることができません.親プライベートメソッドの子クラスが子クラス書き換え親メソッドを継承できない場合、アクセス権限を低くすることはできません.親の静的メソッドを一致させることが望ましいです.子クラスも静的メソッドで書き直さなければなりません.これはメソッド書き換えとは言えませんが、現象は確かにそうです.メソッド書き換えとは言えない理由については、(静的には静的のみを上書きする)サブクラス書き換え親メソッドについて説明します.同じように宣言したほうがいいです.
方法書き直しの面接問題OverrideとOverloadの違いは?Overloadは戻り値のタイプを変更できますか?overloadは戻り値タイプを変更し、パラメータリストメソッドのみを見て書き換えることができます.サブクラスには、親クラスのメソッド宣言と同じメソッドが表示されます.メソッドの再ロード:このクラスに表示されるメソッド名と同様に、パラメータリストが異なるメソッド.戻り値には関係ありません.サブクラスオブジェクト呼び出しメソッドの場合:サブクラス自体を探してから親を探します
public static void main(String[] args) {
Dog d1 = new Dog();
d1.setColor(" ");
d1.setLeg(4);
System.out.println(d1.getColor() + "," + d1.getLeg());
Dog d2 = new Dog(" ",2);
System.out.println(d2.getColor() + "," + d2.getLeg());
}
}
class Animal {
private String color;
private int leg;
public Animal(){}
public Animal(String color,int leg) {
this.color = color;
this.leg = leg;
}
public void setColor(String color) {
this.color = color;
}
public void setLeg(int leg) {
this.leg = leg;
}
public String getColor() {
return color;
}
public int getLeg() {
return leg;
}
public void eat() {
System.out.println(" ");
}
}
class Cat extends Animal2 {
public Cat(){}
public Cat(String color,int leg) {
super(color,leg);
}
public void catchMouse() {
System.out.println(" ");
}
}
class Dog extends Animal2 {
public Dog(){}
public Dog(String color,int leg) {
super(color,leg);
}
public void lookHome() {
System.out.println(" ");
}
}
finalキーワード
/*
final
final ,
final , ( )
final ,
final ,
*/
public static void main(String[] args) {
final int num = 10; //final
System.out.println(num);
final Person2 p1 = new Person2(" ",23);//0x0011
//p1 = new Person(" ",24);//0x0022
p1.setName(" "); //final
p1.setAge(24); //
System.out.println(p1.getName() + "," + p1.getAge());
}
}
class Person2 {
private String name;
private int age;
public Person2(){}
public Person2(String name,int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public static void main(String[] args) {
Demo d = new Demo();
//System.out.println(d.NUM);
d.show();
}
}
/*
final 。
final
1, ,
2, ,
*/
class Demo {
final int NUM;
public Demo() {
NUM = 10;
}
public void show() {
//NUM = 10;
System.out.println(NUM);
}
}
マルチステート
多態は物事の存在の多様な形態である.
マルチステートの前提
マルチステートの3つの前提1、継承2、書き換え3がある場合、親参照はサブクラスオブジェクトのマルチステートでのコンパイルと実行メンバー変数を指します:コンパイルは左を見て、実行は左を見て、コンパイルは左を見て、実行は右を見て(動的バインド)静的メンバー方法:コンパイルは左を見て、実行は左を見て静的メンバー方法は上書きされていないという説は静的でないメンバー方法だけです.コンパイル左(親)実行右(子)
/*
* a: ( )
* b: ( )
* 。*/
public static void main(String[] args) {
Person p = new SuperMan(); // ( , )
System.out.println(p.name);
p. ();
// p.fly();
SuperMan sm = (SuperMan)p; //
sm.fly();
}
}
class Person {
String name = " ";
public void () {
System.out.println(" ");
}
}
class SuperMan extends Person {
String name = " ";
public void () {
System.out.println(" ");
}
public void fly() {
System.out.println(" ");
}
抽象クラス
/* 、 , , abstract 。
A: , 。 。
B: 。 。
C: , , , 。
:
A: : 。( )
B: : , * , 。 * 。 。
C: : , ? class, 。 ? , 。*/
public static void main(String[] args) {
//Animal a = new Animal();
//a.eat();
Animal2 a = new Cat2();
a.eat();
Cat2 c = new Cat2();
c.eat();
Dog d = new Dog();
d.eat();
System.out.println(c.num);//
}
}
abstract class Animal2 { // ,
int num = 10;
public abstract void eat(); //
public void sleep() { // ( )
System.out.println(" "); //
}
public Animal2() {
}
}
class Cat2 extends Animal2 {
public Cat2(){// super
super();
}
public void eat() {
System.out.println(" ");//
}
}
/* abstract ?
private
, 。 ,
abstrac
static
, 。
final
final 。 abstract 。
C: ?
。 */
インタフェース
public static void main(String[] args) {
Demo d = new Demo();
d.print();
//System.out.println(Inter.num);
}
}
/*
a: interface
interface {}
b: implements
class implements {}
c:
, ?
。
d:
a: 。 。
b: 。 。
; , 。
:public static final
: 。
: 。
: 。
:public abstract
: 。*/
interface Inter {
public static final int num = 10; //
public abstract void print(); //
}
class Demo implements Inter {
public void print() { // , public
System.out.println("1111111111111");
}
}
public static void main(String[] args) {
/*DemoE d = new DemoE();
d.method();
d.show();*/
DemoG d = new DemoG();
}
}
/*
, ,
A: : 。 extends
B: : , 。 extends
C: : , 。 implements
*/
interface DemoA {
public void show();
}
interface DemoB {
public void method();
}
abstract class DemoC {
public abstract void print();
}
/*class DemoD extends DemoC { // ,
}*/
/*class DemoE implements DemoA,DemoB { // ,
public void show() {
System.out.println("show");
}
public void method() {
System.out.println("method");
}
}*/
interface DemoF extends DemoA,DemoB{ // ,
}
class DemoG implements DemoF {
public void show() {
System.out.println("show");
}
public void method() {
System.out.println("method");
}
}
/* :
A: ; 。
B:
:
: , 。
: , 。
: , 。
:
: 。 public static final
: 。 public abstract
C: 。 。
D: :"is a" 。xx yy 。 : "like a" 。xx yy 。*/
メンバーの内部クラス
public static void main(String[] args) {
//Inner i = new Inner();
//i.print();
// . = . ;
//Outer.Inner o = new Outer().new Inner();
//o.print();
Outer o = new Outer();
o.method();
}
}
/* ,: ,
: , , , .this*/
class Outer { //
//
private int num = 10;
private class Inner { // , : ,
public void print() { //
System.out.println(Outer.this.num);
}
}
public void method() {
Inner i = new Inner(); //
i.print(); //
}
}
静的内部クラス
public static void main(String[] args) {
// . = . ;
/*Outer2.Inner oi = new Outer2.Inner();
oi.print();
Outer.Inner.method();*/
}
}
/* , static*/
class Outer2 {
static class Inner {
public void print() {
System.out.println("Hello World!");
}
public static void method() {
System.out.println("method");
}
}
/*class Inner2 { //
public static void run() {
System.out.println("run");
}
}*/
}
ローカル内部クラス
public static void main(String[] args) {
//Outer o = new Outer();
//o.method();
Outer1 o = new Outer1();// , 。
o.method();
}
}
/* , , */
class Outer1 { //
public void method() { //
final int num = 10;// final ,
class Inner { //
public void show() { //
System.out.println(num);
}
}
Inner i = new Inner();// , 。
i.show();
}
}
匿名内部クラスpublic static void main(String[] args) {
Outer2 o = new Outer2();
o.method();
}
}
interface Inter {
public void show1();
public void show2();
}
/* : 。
:new (){ ,( 。)}
: 。
*
* , , 。*/
class Outer {
/*class Inner implements Inter { //
public void show1() {
System.out.println("show1");
}
public void show2() {
System.out.println("show2");
}
}
public void method() {
Inter i = new Inner(); //
i.show1();
i.show2();
}*/
public void method() {
/*new Inter() {
public void show1() {
System.out.println("show1");
}
public void show2() {
System.out.println("show2");
}
}.show1();
new Inter() {
public void show1() {
System.out.println("show1");
}
public void show2() {
System.out.println("show2");
}
}.show2();*/
Inter i = new Inter() { //
public void show1() {
System.out.println("show1");
}
public void show2() {
System.out.println("show2");
}
};
i.show1();
i.show2();
}