A、クラスとオブジェクト
オブジェクト指向プログラムはオブジェクトで構成含むそれぞれのオープンおよび隠れた部分を達成するために、ユーザの特定の機能の部分を
問題は、理想的な小規模プロセス開発アプローチに分解され、オブジェクト指向および大規模な問題を解決するためのより適切な
1.1クラス
構成オブジェクト・クラスは、のためのテンプレートまたは設計図で
作成されたクラスのプロセスと呼ばれるクラスのコンストラクタ・オブジェクト・インスタンス
Javaで書かれたすべてのコードは、クラス内に配置されています
パッケージ
- 正式には、パッケージには、パケット内のアクションとデータの組み合わせであり、隠されたユーザーの使用データオブジェクト
- プロセス・データ・オブジェクトの例は、データを操作するための方法と呼ばれる、ドメインと呼ばれ
- パッケージへの鍵は、クラスのメソッドを直接別のクラスフィールドのインスタンスにアクセスすることを許可してはならない、唯一のアプリケーションは、プロセス・データ・オブジェクトがオブジェクトと相互作用します
- クラスは限り依然として操作データと同様の方法を用いて、データを総合的に格納されている方法を変更することができ、他のオブジェクトが知っている又は発生した変更を気にしないであろう
受け継ぎます
- クラスに継承と呼ばれるクラスを拡張して、別のプロセスを作成するには
- 拡張クラスのすべての属性とメソッドを拡張した後、新しいクラス
1.2オブジェクト
オブジェクトの三つの主要な特徴
- オブジェクトに適用することが可能な操作 - オブジェクトの挙動
- オブジェクトの状態 - これらは、オブジェクトがどのように反応するか、適用
- オブジェクト識別 - どのように異なるオブジェクトの同一の動作状態と同定します
各オブジェクトは、現在の機能を説明する情報を保持している、つまり、オブジェクトの状態は、
オブジェクトの状態は、メソッドを呼び出すことによって達成されなければならない、または唯一のショーパッケージが侵害された変更します
クラス1.3の間の関係
関係の中で最も一般的なクラスの重合の依存性、継承
1依存
「ユース」の関係は、最も一般的な関係、明らかである
別のクラスのクラスメソッド操作オブジェクトは、クラスが依存して言うならば別のクラスでは
、クラス間の結合の最小度ように、クラスの相互依存性を最小限に抑えることが可能でなければならない
、重合は2
も、「関連」と呼ばれる
関係「-有する」、
オブジェクト・クラスA、クラスBはオブジェクト含み
、3継承
、関係「-です」一般と特別な関係を表し
1.4クラス
1、初期化
関数内のローカル変数の、コンパイラは直接デフォルト値に、使用前に初期化する必要はありません。しかし、クラスのメンバ変数は、値をデフォルト設定されますコンパイラは、直接使用することができ
、新しいターゲットの後にデフォルトで初期化された内部プロパティの値を:
- 短い/ INT /バイト:0
- 長期:0L
- ブール:偽
- 文字: '\のU0000'
- フロート:は0.0f
- ダブル:0.0d
図2に示すように、割り当てが
実質的変数割り当ての値がコピーされ
たオブジェクト・ポインタの割り当てを直接割り当てられ、2つのオブジェクトがメモリ内の同じ場所を指し
package OO;
/**
* Java类与对象
* @version 15:40 2019-09-28
* @author xxwang1018
*/
class Father {
private int money = 100; //私有
long mobile = 13999999999L;
public void hello() {
System.out.println("hello");
}
}
class Son extends Father {
public void hi() {
//子类可以扩展自己的成员方法
System.out.println("hi~~~~~");
}
public void s1() {
Son s = new Son();
System.out.println(s.mobile); //Son没有定义mobile, 而是通过父类继承的
//System.out.println(s.money); //error 父类的money是私有的,子类无法直接访问
//子类必须通过父类的方法才能访问父类的私有变量
s.hello(); //Son没有定义f1, 而是通过父类继承的
s.hi(); //Son可以自定义自己的成员方法
}
}
public class Class_Object {
private int a;
public void setA(int a) {
this.a = a;
}
public int add(int b) {
return this.a + b;
}
public static void main(String[] a) {
int b = 5;
Class_Object obj = new Class_Object();
obj.setA(10);
System.out.println(obj.add(b));
Son son=new Son();
son.s1();
}
}
第二に、コンストラクタ
役割:オブジェクトのメンバ変数の割り当てを生成します
- Javaのコンストラクタは、クラス名の名前、およびノーリターン値でなければなりません
- 各Javaクラスは、コンストラクタを持っている必要があります
クラスは限りパラメータリストと同一ではない、複数のコンストラクタを持つことができます
- 引数に依存すると、新しいオブジェクト、適切なコンストラクタの自動選択。引数がない場合には、一致するパラメータが与えられます
Javaはそのライフサイクルのうち変数は、JVMが自動的に割り当てられたメモリのオブジェクトを再利用しますと、自動メモリ回復メカニズムを持っています
初期化
1は、デフォルトのフィールドが初期化され
た値がブール値がfalseで、0である、nullオブジェクト参照:コンストラクタは、自動的に割り当てられたデフォルト値(コンストラクタを持つ)ドメインに明示的に初期値をしない場合は
2、関連する設定パラメータある
コンストラクタを明示的に定義されていない場合、Javaコンパイラが自動的に目に見えないクラスの空の引数のコンストラクタを生成し、デフォルト値に設定されているすべてのインスタンスフィールドは、
明示的な引数のコンストラクタは、コンパイラがない操作があったかどう
かのクラスは、少なくともコンストラクタ提供するが、例えば、ハンドコードの防止一般的な問題として、何のパラメータが不正とみなされません場合、オブジェクトが構築されるときに、引数なしのコンストラクタ引数なしのコンストラクタを提供しませんでした
new Employee(){
//no information
}
3、コンストラクタは、別の呼び出し
のようなこの種のコンストラクタ、(...)の最初の文は、コンストラクタは、(特定の呼パラメータの一致に依存する)は、同じクラスのコンストラクタの別のを呼び出す場合
ステップのコンストラクタを呼び出します
- すべてのデータフィールドは、デフォルト値に初期化されます
- クラス宣言の順序が順次初期設定ステートメントと、すべてのドメインの初期化ブロックを実行発生します
- 第コンストラクタコールの最初の行のプロセッサは、第二本体が実行するように構成されている場合
- ボディ構造の実装
import java.util.*;
/**
* 对象构造
* @version 08:09 2019-09-30
* @auther xxwang1018
*/
public class ConstructorTest{
public static void main(String[] args){
Employee[] staff = new Employee[3];
staff[0] = new Employee("harry", 40000);
staff[0] = new Employee(60000);
staff[0] = new Employee();
//print out information about all Employee objects
for(Employee e : staff)
System.out.println("name="+ e.getName()+ ",id="+ e.getId()+ ",salary="+ e.detSalary());
}
}
class Employee{
private static int nextId;
private int id;
private String name = ""; //intance field initialization
private double salary;
//static initialization block
static{
Random generator = new Random;
//set nextId to a random number between 0 and 9999
nextId = generator.nextInt(10000);
}
//object initialization block
{
id = nextId;
nextId++;
}
//three overloaded constructors
public Employee(String aName, double aSalary){
name = aName;
salary = aSalary;
}
public Employee(double aSalary){
//calls the Employee(String, double) constructor
this("Employee #"+ nextId, aSalary);
}
//the default constructor
public Employee(){
//name initialized to "" --see above
//salary not explicitly set --initialized to 0
//id initialized in initialization block
}
public String getName(){
return name;
}
public double detSalary(){
return salary;
}
public int getId(){
return id;
}
}
第三に、情報隠蔽、およびこの
オブジェクト指向では、ルールを持っている:情報が隠れて
- クラスのメンバーは、民間の宿泊施設には、プライベートです
- この方法は、パブリッククラス公開され、部材の特性によって値を変更します
アナロジー:身近な友人、それが直接彼の引き出しの中に物事を取るが、彼のパブリック・インタフェースを介してアクセスし、どのような修正はありません
。この役割を
- このクラスにメンバ変数をポインティング
- メンバークラスに従う方法
this.add(5,3); //调用本类的add方法, this可忽略
- 代わりに、このクラスのコンストラクタの
this(5); //调用本类的只有一个形参的构造函数
public class ThisTest {
private int id;
public ThisTest(int id) {
this.id = id; //指向本类中的成员变量
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}