20200719-オブジェクト指向の基礎-(クラスとオブジェクト)(インスタンス変数とインスタンスメソッドに静的メソッドで直接アクセスできない理由)

20200719-オブジェクト指向の基礎(クラスとオブジェクト)(静的メソッドのインスタンス変数とインスタンスメソッドに直接アクセスできない理由)

クラスノート

言語:
アセンブリ言語、
インタプリタ言語、
アセンブリ言語高水準プログラミング言語c言語
Java、c ++
オブジェクトは静的特性と動的特性で構成されます;
静的特性:呼び出された属性、
動的特性:呼び出されたメソッド、
クラスは同じ特性(抽象)
オブジェクトを持つオブジェクトのコレクションですクラスのエンティティです
標準ステートメント:クラスはオブジェクトの抽象化です。オブジェクトはクラスの具体的な実現です

オブジェクト指向は次のように分類されます。OOA.OOD.OOP
メソッド:戻り値がない場合、フォーカスはプロセスにあります->ストアドプロシージャ
戻り値がある場合、フォーカスは結果にあります----->関数

メソッドの形式:
戻り値なし:
[アクセス修飾子のタイプ] voidメソッド名(){ コード;}

戻り値:[アクセス修飾子のタイプ]戻り値のタイプメソッド名(){ コード;}

メソッド呼び出し:パラメーターなしのメソッドの呼び出し:
オブジェクト名メソ​​ッド名()呼び出しは
、パラメーターのメソッドを呼び出すことができます:
戻り値の型変数名=オブジェクト名メソ​​ッド

コード部分

1.学校

  • 属性:学校名、住所、コース
  • 方法:広報、教育

関数部分を定義するコード:

public class School {
    
    
    String schoolName;
    String address;
    String subject;
    public void adertisement(){
    
    
        System.out.println("本校:"+schoolName+",地址为:"+address+",教授课程为:"+subject);
    }
    void testUseOther(){
    
    
        Student s = new Student();
        s.show();
    }
}

呼び出し関数部分のコード:

public class TestSchool {
    
    
    public static void main(String[] args) {
    
    
        School qingNiao = new School();
      qingNiao.testUseOther();
    }
}

2.観光客

  • 属性:名前の年齢

コードの定義部分:

観光カテゴリー:

public class Visitor {
    
    
    String name;
    int age;
}

公園カテゴリ:

public class Park {
    
    
    Visitor visitor; //属性
    final int PRICE = 100;
    void sellTicket(){
    
    
        int age = visitor.age;
        //60岁以上免票,20岁以下半票,其余全票
        if (age>60){
    
    
            System.out.println("滴,老年卡,您需要支付"+0*PRICE);
        }else if (age<22){
    
    
            System.out.println("滴,学生卡,您需要支付"+PRICE/2);
        }else {
    
    
            System.out.println("滴,普通卡,您需要支付"+PRICE);
        }
    }
}

関数部分を呼び出す:

public class TestTour {
    
    
    public static void main(String[] args) {
    
    
        Visitor v = new Visitor();
        v.name = "zhanghao";
        v.age = 22;
        Park p = new Park();
        p.visitor=v;
        p.sellTicket();
    }
}

補足:静的
メソッドでインスタンス変数やインスタンスメソッドに直接アクセスできない理由:
静的メソッドはクラスに属している、つまり、静的メソッドはクラスの読み込みで読み込まれます。クラスが読み込まれると、プログラムは静的メソッドにメモリを割り当てます非静的メソッドはオブジェクトに属します。オブジェクトはクラスがロードされた後に作成されます。つまり、静的メソッドはオブジェクトの前に存在します。オブジェクトを作成すると、プログラムは通常、このポインターを使用して、ヒープ内のオブジェクトにメモリを割り当てますオブジェクトを指す。静的メソッドはオブジェクトの呼び出しに依存せず、「クラス名。静的メソッド名」を通じて呼び出されます。非静的メソッドの場合、プログラムはオブジェクトの作成時にオブジェクトにメモリを割り当て、クラスのオブジェクトを介して非静的メソッドにアクセスします。したがって、オブジェクトが存在しない場合、非静的メソッドは存在せず、静的メソッドは、存在しないメソッドを呼び出すことはできません。

非静的な説明:非静的なメソッドと変数(ローカル変数など)はスタックに存在し、スレッドに依存せず、各オブジェクトインスタンスに属します。オブジェクトインスタンスは、メモリ共有されているヒープに格納されます。
オブジェクトインスタンスは静的変数にアクセスでき、静的メソッドと変数への通常の呼び出しには影響しません

したがって、非静的メソッドは、作成時間の遅れにより、静的メソッドと変数にアクセスできます

おすすめ

転載: blog.csdn.net/qq_42005540/article/details/107444054