JAvaはマルチステート仮想クラスインタフェース異常スレッド内部クラスを継承する


JAva権限キーワード 
private:プライベートで、権限修飾子です.メンバーの修飾に使用され、プライベートなコンテンツはこのクラスでのみ有効です.
public:共通のすべてのオブジェクトを参照できます.
class de
{
	int x = 3;
	public static void main(String[] args)
	{
		de d = new de();
		System.out.println(d.x);
		d.x = 9;
		System.out.println(d.x);
		show(d);
		System.out.println(d.x);
	}
	public static void show(de d)
	{
		d.x = 4;
	}
}

結果は;
3   1つ目は、クラス内のメンバー変数として参照されます.
9   2番目のメンバー変数の再割り当て
4   3番目のアドレスは、スタックアドレスからスタックアドレスに変更されます.
JAvadoc抽出情報のフォーマット javadoc -private -d doc -author -version myHelloworld.java
/**
              ,                 :  ,    。
@author   
@version V1.0
*/

public class ArrayTool
{
	/**
	          。
	@param arr        int     。
	@return           
	*/
	public static int getMax(int[] arr)
	{
		int maxIndex = 0;
		for(int x=1; x<arr.length; x++)
		{
			if(arr[x]>arr[maxIndex])
					maxIndex = x;//
		}

		return arr[maxIndex];
	}
	
}

子クラスは親を継承および上書きできます
上書きの注意事項:
1.子メソッドが親メソッドを上書きする場合、子メソッドの権限は親メソッドと同等以上でなければなりません. 
2.静的に上書きできるのは静的、または静的に上書きされます.
抽象クラス
特徴:
1,メソッドは宣言のみが実装されていない場合,abstractによって修飾される抽象メソッドである.
抽象メソッドは抽象クラスで定義する必要があります.このクラスはabstractによっても修飾されなければならない.
2,抽象クラスはインスタンス化できない.どうして?抽象的なメソッドを呼び出すのは意味がないからです.
3、抽象クラスは、そのサブクラスがすべての抽象メソッドを上書きした後に、そのサブクラスがインスタンス化される必要があります.そうでなければ、このサブクラスは抽象クラスです.
1,抽象クラスにコンストラクション関数はありますか?
はい、サブクラスオブジェクトを初期化するために使用されます.
2,抽象クラスは抽象メソッドを定義しなくてもいいですか?
いいですよ.しかし、クラスにオブジェクトを作成させないことを目的とするのは珍しい.AWTのアダプタオブジェクトがこの種類です.
通常、このクラスのメソッドにはメソッドがありますが、内容はありません.
abstract class Demo
{
	Demo()
	{
		System.out.println("demoa ");
	}
	abstract /*  */ void show();

	void ha()
	{
		System.out.println("demoa s");
	}
	
}

class DemoA extends Demo
{
	void show()   //     show
	{
		System.out.println("demoa show");
	}
}

class AS
{
	public static void main(String[] args) 
	{
		DemoA a = new DemoA();
		a.show();
		a.ha();      //               
	}
}

   demoa         //        
     demoa show 
     demoa s

3、抽象キーワードはそれらのキーワードと共存できませんか?
privateだめだ  staticだめだ finalだめだ  仮想クラスは布団クラスでカバーする必要があるため
4,抽象クラスと一般クラスの異同点.
同じ点:
抽象クラスも一般クラスも物事を記述するために用いられ,内部にメンバーが定められている.
違い:
1,一般クラスには物事を記述するのに十分な情報がある.
  抽象クラスは物事を記述する情報が不足する可能性がある.
2,一般クラスでは抽象メソッドを定義することはできず,非抽象メソッドのみを定義する.
  抽象クラスでは抽象メソッドを定義したり、非抽象メソッドを定義したりすることができます.
3,一般クラスはインスタンス化できる.
  抽象クラスはインスタンス化できません.
5,抽象類は親に違いないか.
はい.サブクラスをインスタンス化するには、サブクラスがメソッドを上書きする必要があるためです. 
インタフェース
抽象クラスのメソッドが抽象的である場合、その抽象クラスを
もう一つの形式定義と表現は、インタフェースinterfaceです.
インタフェースでよく見られるメンバー:および、これらのメンバーには固定された修飾子があります.
1,グローバル定数:public static final 
2,抽象的な方法.public abstract 
これにより、インタフェースのメンバーはすべて共通の権限であると結論する.
interface Demo
{
	public static final int NUM = 4;

	public abstract void show1();
	public abstract void show2();
}
class DemoImpl implements /*  */Demo
{
	public void show1()
	{}
	public void show2()
	{
	
	}
}

クラスとクラスの間には継承関係があり、クラスとインタフェースは直接実装関係である. 
インタフェースはインスタンス化できません.このサブクラスは、インタフェースを実装したサブクラスによってのみインスタンス化され、インタフェース内のすべての抽象メソッドが上書きされます.
JAvaではマルチ継承は直接サポートされず、1つのクラスで複数のインタフェースを実現することができ、インタフェースの出現は単一継承の限界を回避する.
interface A
{
	public void show();
}
interface Z
{
	public int add(int a,int b);
}
class Test implements A,Z//   
{	
	public int add(int a,int b)
	{
		return a+b;	
	}
	public void show(){}
}

1つのクラスは、別のクラスを継承すると同時に、複数のインタフェースを実現することもできます.
class Q
{
	public void method()
	{}
}
abstract class Test2 extends Q implements A,Z
{
}

インタフェースは複数継承可能
interface CC
{
	void show();
}
interface MM
{
	void method();
}
interface QQ extends  CC,MM//            ,         。 
{
	void function();
}
class WW implements QQ
{
//  3   。
	public void show(){}
	public void method(){}
	public void function(){}
}

インタフェースが抽象クラスと異なる点:
1,抽象クラスは継承される必要があり,単一の継承しかできない.
  インタフェースは実装される必要があり、多く実装することができる. 
2,抽象クラスでは抽象メソッドと非抽象メソッドを定義でき,サブクラスが継承された後,直接非抽象メソッドを用いることができる.
  インタフェースでは抽象メソッドしか定義できず,サブクラスで実現しなければならない. 
マルチステート
class   
{}
class   extends   
{}

動物x=new猫();//1つのオブジェクト、2つの形態.
猫のようなものは猫の形をしていて、動物の形をしています.これがオブジェクトの多態性です. 
親またはインタフェースの参照は、その子のオブジェクトを指します.
マルチステートのメリット:
コードの拡張性が向上し、前期定義のコードは後期の内容を使用することができます.
多態の弊害:
前期定義の内容は、後期サブクラスの固有の内容を使用(呼び出し)できません.
マルチステートの前提:
1、関係、継承、実現しなければならない.
2、カバーが必要です. 
class Fu
{
	int num = 3;
	void show()
	{
		System.out.println("fu show");
	}

	static void method()
	{
		System.out.println("fu static method");
	}
}

class Zi extends Fu
{
	int num = 4;
	void show()
	{
		System.out.println("zi show");
	}

	static void method()
	{
		System.out.println("zi static method");
	}
}

class  DuoTaiDemo3
{
	public static void main(String[] args) 
	{
		Fu f = new Zi();                    
		f.method();                        //fu static method                
		f.show();                           //zi show                     
		System.out.println(f.num);         //3                               
	}
}

マルチステートの場合、メンバーの特徴:
1、メンバー変数.コンパイルと実行は、等号の左側を参照します.
2、メンバー関数(非静的).コンパイルは左を見て、実行は右を見て
3、静的関数.コンパイルも実行も左を見ます.
内部クラス
class Outer
{
	int num = 3;
	class Inner
	{
		int num = 4;
		void show()
		{
			int num = 5;
			System.out.println(Outer.this.num);
		}
	}
	void method()
	{
		new Inner().show();
	}
}

class InnerClassDemo2 
{
	public static void main(String[] args) 
	{
		new Outer().method();
		new Outer().new Inner().show(); //       
	}
}
System.out.println(Outer.this.num);    //    3
//  Outer.        4
//  this.        5

異常
throwsとthrowの違い.
1,throwsは関数に使用されます.
   throwは関数内で使用されます.
2,throwsが投げ出すのは異常クラスで,複数を投げ出し,カンマで区切ることができる.
   throwが投げ出したのは異常オブジェクトです.
try
{
	//          。
}
catch(      )//              
{
	//       。
}
finally
{
	//         。
}

  catch  return,        , finally        
class Demo
{
	public int method(int[] arr,int index) throws NullPointerException
	{	
		if(arr==null)
			throw new NullPointerException("        ");
		if(index<0)
			throw new FuShuIndexException();
			
		return arr[index];
	}
}

class  ExceptionDemo4
{
	public static void main(String[] args) 
	{
		int[] arr = new int[3];		
		Demo d = new Demo();
		try
		{
			int num = d.method(null,-1);     //  method  ,       
			System.out.println("num="+num);	 		
		}		
		catch(NullPointerException e)
		{
			System.out.println(e.toString());
		}
		System.out.println("over");
	}
	
}
package    myclass           myclass   
import  myclass.*;    myclass 

進行中のプログラムはプロセスです.アプリケーションに対応するメモリ内の領域です.プロセスは実行されません.メモリ領域を割り当てるだけです.
スレッドYes:プロセス内の実行パス メモリにメモリを移動することにしました
スレッドの作成手順:
1クラス継承Threadクラスを定義します.
2,Threadクラスのrunメソッドを上書きする.
3,Threadのサブクラスオブジェクト作成スレッドを直接作成する.
4,startメソッドを呼び出してスレッドを開き,スレッドを呼び出すタスクrunメソッド実行.
class Demo extends Thread
{
	public void run()
	{
		for(int x=0; x<10; x++)
		{
			for(int y=-9999999; y<999999999; y++){}  //          
			System.out.println(name+" x="+x+" name="+Thread.currentThread().getName());
		}
	}
}

class ThreadDemo2 
{
	public static void main(String[] args) 
	{
		Demo d1 = new Demo();
		Demo d2 = new Demo();
		d1.start();//    ,  run  。		
		d2.start();
	}
}

1,定義クラス実装Runnableインタフェース.
2,インタフェース内のrunメソッドを上書きし,スレッドのタスクコードをrunメソッドにカプセル化する.
3,Threadクラスによりスレッドオブジェクトを作成し,RunnableインタフェースのサブクラスオブジェクトをThreadクラスのコンストラクタのパラメータとして渡す.
class Demo implements Runnable//extends Fu //    Demo    ,                 。
					//         。
{
	public void run()
	{
		show();
	}
	public void show()
	{
		for(int x=0; x<20; x++)
		{
			System.out.println(Thread.currentThread().getName()+"....."+x);
		}
	}
}


class  ThreadDemo
{
	public static void main(String[] args) 
	{	
		Demo d = new Demo();
		Thread t1 = new Thread(d);
		Thread t2 = new Thread(d);
		t1.start();
		t2.start();
	}
}