オブジェクト向け_4


1:形式パラメータと戻り値の問題(理解)
(1)形式パラメータ:
クラス名:クラスが必要なオブジェクト
抽象クラス名:クラスが必要なサブクラスオブジェクト
≪インタフェース名|Interface Name|ldap≫:インタフェースが必要なインプリメンテーション・クラス・オブジェクト
(2)戻り値タイプ:
≪クラス名|Class Name|ldap≫:クラスのオブジェクトを返します.
抽象クラス名:クラスのサブクラスオブジェクトを返します.
≪インタフェース名|Interface Name|ldap≫:インタフェースの実装クラスのオブジェクトを返します.
(3)チェーンプログラミング
オブジェクト方法1().方法2()....方法n();
この使い方:実は方法1()の呼び出しが終わった後、1つのオブジェクトを必要とします;
メソッド2()呼び出しが完了したら、オブジェクトを返す必要があります.
メソッドn()の呼び出しが完了すると、オブジェクトであってもよいし、オブジェクトでなくてもよい.
2:パッケージ(理解)
(1)実はフォルダ
(2)作用:
A:同名のクラスを区別する
B:クラスを分類管理する
a:機能別
b:モジュール別
(3)パッケージの定義(把握)
パッケージ名;
多段包用分かれる.
(4)注意事項:(把握)
A:package文は、ファイル内の最初の有効な文でなければなりません.
B:javaファイルにはpackageが1つしかありません
C:packageがない場合、デフォルトはパッケージ名なしです
(5)パッケージ付きコンパイルと実行
A:手動式
B:自動式(把握)
javac -d . HelloWorld.java
3:パイロット(把握)
(1)パッケージ付きクラスを何度も使用していて、とても面倒で、この時、Javaはキーワードimportを提供しました.
(2)形式:
importパッケージ名...クラス名
もう1つ:
importパッケージ名...*;(推奨しない)
(3)package,import,classの手順
package > import > class
4:権限修飾子(把握)
(1)権限修飾子
このクラスは同じパケットの下で異なるパケットの下のサブクラスの異なるパケットの下の無関係クラスです.
private Y
デフォルトY
protected Y Y Y
public Y Y Y Y
(2)この4つの権限修飾子は,任意の時点で1つしか出現しない.
public class Demo {}
5:一般的な修飾子(理解)
(1)分類:
パーミッション修飾子:private,デフォルト,protected,public
ステータス修飾子:static,final
抽象修飾子:abstract
(2)一般的なクラスとその構成の修飾
クラス:
デフォルト、public、final、abstract
一般的:public
メンバー変数:
private,デフォルト,protected,public,static,final
一般的:private
構築方法:
private,デフォルト,protected,public
一般的:public
メンバーメソッド:
private,デフォルト,protected,public,static,final,abstract
一般的:public
(3)さらに一般的なもの:
public static final int X = 10;
public static void show() {}
public final void show() {}
public abstract void show();
6:内部クラス(理解)
(1)クラスを別のクラスの内部に定義し,そのクラスを内部クラスと呼ぶ.
例:クラスBをクラスAに定義すると,クラスBは内部クラスと呼ばれる.
(2)内部クラスのアクセスルール
A:プライベートを含む外部クラスのメンバーに直接アクセスできます.
B:外部クラス内部クラスメンバーにアクセスするには、オブジェクトを作成する必要があります.
(3)内部クラスの分類
A:メンバー内部クラス
B:ローカル内部クラス
(4)メンバー内部クラス
A:privateデータのセキュリティのため
B:staticアクセスの便宜上
メンバーの内部クラスは静的ではありません:
外部クラス名内部クラス名オブジェクト名=new外部クラス名.New内部クラス名();
メンバーの内部クラスは静的です.
外部クラス名内部クラス名オブジェクト名=new外部クラス名.内部クラス名();
(5)メンバー内クラスの面接問題(空欄)
30,20,10
class Outer {
public int num = 10;
class Inner {
public int num = 20;
public viod show() {
int num  = 30;
System.out.println(num);
System.out.println(this.num);
System.out.println(Outer.this.num);
}
}
}
(6)ローカル内部クラス
A:外部クラスのメンバーに直接アクセスできます
B:ローカル位置では、内部クラスオブジェクトを作成し、オブジェクトから内部クラスメソッドを呼び出して、ローカル内部クラス機能を使用できます.
A:ローカル内部クラスアクセスローカル変数にはfinal修飾が必要です.
B:どうしてですか.
ローカル変数の使用が完了すると消失するため、スタックメモリのデータはすぐに消失しません.
したがって、スタックメモリはこの変数を使用しますが、変更量はもうありません.
この値がまだ存在するようにfinal修飾を加えます.
逆コンパイルツールではfinalを追加すると、変数名ではなく値がスタックメモリに直接格納されることがわかります.
(7)匿名内部類(把握)
A:ローカル内部クラスの簡略化形式
B:前提
クラスまたはインタフェースが存在する
C:フォーマット:
newクラス名またはインタフェース名(){
書き換え方法
}
D:本質:
実はクラスを継承したりインタフェースを実装したりするサブクラス匿名オブジェクトです
(8)開発における匿名内部クラスの使用
開発時に抽象クラスやインタフェースをパラメータとして見ます.
このとき,実際に必要なのはサブクラスオブジェクトであることが分かった.
このメソッドが1回だけ呼び出されると、匿名の内部クラスのフォーマットを使用して簡略化できます.
interface Person {
public abstract void study();
}
class PersonDemo {
public void method(Person p) {
p.study();
}
}
class PersonTest {
public static void main(String[] args) {
PersonDemo pd = new PersonDemo();
pd.method(new Person() {
public void study() {
System.out.println(「よく勉強して、毎日向上する」);
}
});
}
}
(9)匿名内部類の面接問題(補完コード)
interface Inter {
void show();
}
class Outer {
//補完コード
public static Inter method() {
return new Inter() {
public void show() {
System.out.println("HelloWorld");
}
};
}
}
class OuterDemo {
public static void main(String[] args) {
Outer.method().show();//"HelloWorld"
}
}
###########################################################################################
1:形式パラメータと戻り値の問題
形式パラメータ
基本タイプ
参照タイプ
戻り値のタイプ
基本タイプ
参照タイプ
2:パッケージの定義と注意
package
最初の有効な文
ユニーク
3:梱包及び注意事項
import
java.langはインポートする必要はありません
java.xxx.yyy.クラス名クラスにインポートされたレベル
java.xxx.yyy.*; これもいいですが、お勧めしません.
4:4種類の権限修飾子とその特徴
このクラスの同じパケットの下で異なるパケットの下のサブクラスの異なるパケットの下の無関係クラス
private Y
デフォルトY
protected Y Y Y
public Y Y Y Y
5:一般的な修飾子と組み合わせ
クラス:public
メンバー変数:private
構築方法:public
メンバーメソッド:public
6:内部クラスの概要とアクセスの特徴
クラスを別のクラスの内部に定義し、内部クラスと言います.
アクセス機能:
内部クラスは、プライベートクラスを含む外部クラスのメンバーに直接アクセスできます.
外部クラスが内部クラスにアクセスするメンバーは、オブジェクトを作成する必要があります.
7:内部クラスの分類
位置によって違う
メンバー内部クラスメンバーの場所
メンバー内部クラスの修飾子:
privateデータの安全性を保証するため
staticデータへのアクセスを容易にするため
注意:静的内部クラスがアクセスする外部クラスデータは、静的修飾でなければなりません.
//メンバー内部クラスが静的に修飾されたアクセス方法は、次のとおりです.
//形式:外部クラス名内部クラス名オブジェクト名=new外部クラス名.内部クラス名();
Outer.Inner oi = new Outer.Inner();
ローカル内部クラスローカル定義(外部クラスメンバーメソッド内など)
8:匿名内部クラスのフォーマットと応用と面接問題
newクラス名またはインタフェース名(){
書き換え方法
}
###########################################################################################
抽象類を形参とする
//   ,              
abstract class Person{
	
	public abstract void study();
}
class PersonDemo{
	//            ,        
	public void method(Person p){
		p.study();
	}
}
//           
class Student extends Person{
	public void study(){
		System.out.println("    ,    ");
	}
}
public class ZuoYe {
	public static void main(String[] args) {
		PersonDemo pd=new PersonDemo();
		//        
		pd.method(new Student());
		Person p=new Student();
		p.study();
	}		
}

出力:
よく勉強して毎日向上する
よく勉強して毎日向上する
インタフェースパラメータ
interface Study{
	public abstract void study();
}

class Person{
	public void method(Study s){
		s.study();
	}
}
class Student implements Study{
	public void study(){
		System.out.println("     ");
	}
}
public class ZuoYe {
	public static void main(String[] args) {
		Person p=new Person();
		p.method(new Student());
		//        
		Study s=new Student();
		p.method(s);
		Student st=new Student();
		p.method(st);
	}		
}

出力:
先生が教える
先生が教える
先生が教える
クラス名を返すタイプ
//        
//         
class Student{
	public void study(){
		System.out.println("    ,    ");
	}
}
class Student2{
	public Student getStudent(){
		//        
		return new Student();
	}
}
public class ZuoYe {
	public static void main(String[] args) {
		Student2 s=new Student2();
		Student ss=s.getStudent();//s.getStudent()      new Student()
		ss.study();
	}		
}

出力:
よく勉強して毎日向上する
抽象クラスを返すタイプ
//          
//           
abstract class Person{
	public abstract void study();
}
class Student extends Person{
	public void study(){
		System.out.println("    ");
	}
}
class PersonDemo{
	public Person getPerson(){
		//            
		return new Student();
	}
}
public class ZuoYe {
	public static void main(String[] args) {
		PersonDemo pd=new PersonDemo();
		Person p=pd.getPerson();//    Person p=new Student()
		p.study();
	}		
}

出力:
勉強する時間だ
インタフェースは戻りタイプをします
//        
//              
interface Study{
	public abstract void study();
}
class StudyDemo{
	public Study getStudy(){
		return new Teacher();
	}
}
class Teacher implements Study{
	public void study(){
		System.out.println("     ");
	}
}
public class ZuoYe {
	public static void main(String[] args) {
		StudyDemo sd=new StudyDemo();
		Study s=sd.getStudy();//    Study s=new Teacher()
		s.study();
		//    
		//       ,        
		sd.getStudy().study();
	}		
}

出力:
講義を覚えた
講義を覚えた
匿名の内部クラス
/*
	        :
		    ,    
			interface Inter { void show(); }
			class Outer { //     }
			class OuterDemo {
				public static void main(String[] args) {
					  Outer.method().show();
				  }
			}
			        ”HelloWorld”
*/
interface Inter { 
	void show(); 
	//public abstract
}

class Outer { 
	//    
	public static Inter method() {
		//     --       
		return new Inter() {
			public void show() {
				System.out.println("HelloWorld");
			}
		};
	}
}

class OuterDemo {
	public static void main(String[] args) {
		Outer.method().show();
		/*
			1:Outer.method()    method()   Outer        。
			2:Outer.method().show()    method()           。
				     Inter    show()  ,     method()             。
		*/
	}
}