staticキーワードと継承


一、staticキーワード
オブジェクト間の重複属性のデータ共有を実現するために、主にクラスのメンバーを修飾するために使用されます.
1.メンバー変数
1)非静的メンバー変数:アクセスするオブジェクトを作成する必要があります
2)静的メンバー変数:クラス名を使用して直接呼び出すか、オブジェクトからアクセスできます.
 
2.メンバーメソッド
クラス名を使用して直接呼び出すことができます
2.1静的関数:
1)静的関数では非静的メンバー変数にアクセスできず、静的変数のみにアクセスできます.
2)静的メソッドはthis、superキーワードを定義できない
3)静的はオブジェクトより優先的に存在し、静的方法ではthisがあってはならない
 
2.2非静的関数:静的メンバー変数にアクセスできる非静的関数
 
3. 特長
1)静態はクラスのロードに伴ってロードされ、クラスが消えるにつれて消える
2)オブジェクトの存在よりも優先される,すなわち静的に先に存在し,オブジェクトの後に存在する.
3)すべてのインスタンス(オブジェクト)で共有
4)クラス名で直接呼び出すことができる    
 
[root@bch04 java]# cat Demo.java 
class Person {
    String name;
    int age;
    String gender;
 
    //      
    static String country = "CN";
    
    static {
        System.out.println("       ");
    }
 
    {
        System.out.println("       ");
    }
 
    Person() {
        System.out.println("       ");
    }
 
    Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        System.out.println("    ");
    }
    //    
    static void run() {
        //              
        System.out.println("country:" +country);
    }
 
}
 
    //     
void speak() {
 
        //             
        System.out.println("name:" +name +"age:" +age +"gender:" +gender +"country:" +country +":heihei!");
 
        //             
        run();
    }
 
 
public class Demo {
public static void main(String[] args) {
 
        //               
        String country = Person.country;
        System.out.println(country);
   
        //    .        
        Person p1 = new Person("tom", 28 ," ");
        p1.country = "US";
        p1.speak();
   }
 
}
 
//    
[root@bch04 java]# java Demo
       
CN
       
    
name:tomage:28gender: country:US:heihei!
country:US
[root@bch04 java]# cat Demo6.java 
class Arrays {
 
       private Arrays() {
 
       }
 
       //           
       public static void print(int[] arr) {
              for (int x = 0; x  arr[x + 1]) {
                            int temp = arr[x + 1];
                            arr[x + 1] = arr[x];
                            arr[x] = temp;
 
                     }
              }
       }
 
       //     
       public static void selectSort(int[] arr) {
              for (int x = 0; x  arr[y]) {
                                   int temp = arr[y];
                                   arr[y] = arr[x];
                                   arr[x] = temp;
                            }
                     }
              }
       }
 
       //    
       public static void reverseSort(int[] arr) {
              int start = 0;
              int end = arr.length - 1;
              for (int x = 0; x  arr[mid]) {
                            min = mid + 1;
                     } else if (key  
  


  

main

, , jvm , , :

public static void main(String[] args){
}

:
public:この のアクセス が であることを します.
static:クラスのロードに ってプライマリ がすでに することを します.
void: に な り がありません
main:キーワードではなく、jvmで できる な です
(String[]args): のパラメータ、タイプが 、 が 、すなわち タイプの 、jvmが を び すとnew String[0]が されます.
 
:
[root@bch04 java]# cat Maintest.java 
class Demo {
    public static void main(String[] args) {
        System.out.println(args.length);
        for (int x = 0; x 
  


 

java

1is a ( )

2has a

 

[root@bch04 java]# cat Demo3.java
class Person{
    String name;
    int age;
    Address add;
    
    Person(){  
    }
    
    Person(String name,int age,Address add){      
       this.name=name;
       this.age=age;
       this.add=add; 
    }
    
    void speak(){
       System.out.println("  :"+name+"   :"+age+" "+add.print());
    }
}
 
 
class Address{
    String country;
    String city;
    String street;
    
    Address(){
    }
    
    Address(String country,String city,String street){
       this.country = country;
       this.city = city;
       this.street = street;
    }
    
    String print(){
       return "  :"+country+" "+"  :"+city+"    ;"+street;
    }
}
 
 
class Demo3{
    public static void main(String[] args){       
       Address addr = new Address("  ","  ","    ");
       Person p = new Person("jack",27,addr);
       p.speak();
        }
}
 
//    
[root@bch04 java]# java Demo3
  :jack   :27   :     :      ;    

 

を して、オブジェクトとオブジェクト のコードの を します.クラスとクラス のコード を するには、 を します.
 
1.  :
1)クラス の , されたクラスを クラス(ベースクラス)と び, されたクラスを クラスと ぶ.
2) クラスは クラスのすべてのメンバーを できません.
A. は、 メンバー、 、 など、 なメンバーを します. と メソッドは、サブクラス で び すことができます. メンバーの で び すことに しました.
B.すべてのプライベートメンバーを できない、すなわちprivate メンバー
C.コンストラクタは できない
 
2.extendsキーワード
extendsキーワードを して
  
[root@bch04 java]# cat Demo1.java
class Person {
    String name;
    int age;
 
    //    (   )                  
    static String country = "CN";
 
    Person() {
    }
 
    void speak() {
       System.out.println(name + ":  ,   !!!");
    }
}
 
//          ,    
class Student extends Person {
    Student() {
    }
 
    void study() {
       System.out.println("  :" + name + "  :" + age + ":    ");
    }
}
 
class Worker extends Person {
    void work() {
       System.out.println(name + ":    ,    。");
    }
}
 
class Demo1 {
    public static void main(String[] args) {
       Student stu = new Student();
       stu.name = "tom";
       stu.age = 28;
       stu.study();
       stu.speak();
       System.out.println(stu.country);
       System.out.println(Student.country);
 
       Worker worker = new Worker();
       worker.name = "joy";
       System.out.println(worker.country);
       worker.work();
       worker.speak();
    }
}
 
//    
[root@bch04 java]# java Demo1
  :tom  :28:    
tom:  ,   !!!
CN
CN
CN
joy:    ,    。
joy:  ,   !!!

 
3.superキーワード
:
1) にサブクラスメソッドに し、サブクラスオブジェクトの オブジェクトを す
2) のプロパティへのアクセス
3) の へのアクセス
4) のコンストラクション へのアクセス
5)thisはsuperと ています.thisは のオブジェクトの び しを し、superは の び しオブジェクトの を します.
6)サブクラスのコンストラクション の の は、 クラスのパラメータのないコンストラクション 、 な をデフォルトで び します. パラメトリック が しない 、コンパイルエラー
 
[root@bch04 java]# cat Demo6.java 
class Father {
    int x = 1;
 
    Father() {
       System.out.println("        ");
    }
 
    Father(int x) {
       this.x = x;
       System.out.println("        ");
    }
 
    void speak() {
       System.out.println("    ");
    }                  
}
 
 
class Son extends Father {
    int y = 1;
    Son() {
       System.out.println("         ");
    }
 
    Son(int y) {
       this.y = y + x;
       System.out.println("         ");
    }
 
    void run() {
       super.speak();
    }
}
 
 
class Demo6 {
    public static void main(String[] args) {
       Son s = new Son(3);
       System.out.println(s.y);
                s.run();
                System.out.println("**************");
                s.speak();
    }
}
 
//    
[root@bch04 java]# java Demo6
        
         
4
    
**************
    

 
4. リロードとリライト
リロード(overload) 
1)すべてのリロード は じクラスにある があります.
2) が じで、パラメータリストが なり、 とは (アクセス 、 り タイプ)
3) が う、 が う、タイプが う
 
き え(override)
1)
2) は 、パラメータリストは でなければならない
3) クラスの り タイプが クラスの り であること
  
class Father {
    String name;
    void eat() {
       System.out.println("   ");
    }
}
 
class Son extends Father {
    public void eat() { 
       System.out.println("    ");
       System.out.println("   ");
    }
}
 
class Demo8 {
    public static void main(String[] args) {
       Son s = new Son();
       s.eat();
    }
}
 
 
[root@bch04 java]# java Demo8
    
   

 
5.instanceofキーワード
1) に する
2) されたクラスのオブジェクトであるか かを するためのオブジェクト
3) される はbooleaタイプtrue|false
4) を すときは,2つのクラスの に がある がある.
5) い :
Person p=new Person();
System.out.println( p instanceof Person); //オブジェクト  instanceofクラス;
  
  
class Animal {
    String name;
    void eat() {
       System.out.println("   ");
    }
 
    void shout() {
       System.out.println("    ");
    }
}
 
class Dog extends Animal {
    void eat() {
       System.out.println("   ");
    }
 
    void shout() {
       System.out.println("  ");
    }
}
 
class Cat extends Animal {
    void eat() {
       System.out.println("   ");
    }
    void shout() {
       System.out.println("  ");
    }
}
 
class Demo1 {
    public static void main(String[] args) {
       Demo11 d = new Demo1();
 
        //   instanceof  ;
       System.out.println(d instanceof Demo1);
       d.doSomething(new Dog());
       d.doSomething(new Cat());
    }
 
    void doSomething(Animal a) {
       if (a instanceof Dog) {
           a.eat();
           a.shout();
           System.out.println("    ");
       } else if (a instanceof Cat) {
           a.eat();
           a.shout();
           System.out.println("   ");
       }
    }
}
 
//    
[root@bch04 java]# java Demo1
true
   
  
    
   
  
   

6.finalキーワード
1)これは「これは ではない」という です
2)finalキーワードは にメンバー 、クラスメンバー、 クラス、メソッド、およびメソッドのパラメータに される
 
A.メンバー は であり、 できない:
public static final double PI=3.14;

public:アクセス が
static:メモリに1 しかありません
final: です

に を り てる があります
 
B.final クラスメンバー:
1) データ 、finalは を えない
2)オブジェクト 、finalは を にし、 しいオブジェクトを すことができないようにしますが、オブジェクト は できます.
3) にstaticキーワードと み わせて : は にロードでき、オブジェクトの に する はありません.
4)finalとstaticは を できる
5) は にfinalに される
 
C.final :
1)このクラスは クラスで できない
2)String,Integerクラスはfinal:コード が き えられないように する はない
 
D.final :
1)この は な であり, き えられない.
2)クラスが されると、すべての プライベート が されます. がクラスに され、 き えられたくない は、 finalを できます.
3)クラス の がfinalに されている 、クラスをfinalとして できます.
 
class Demo12 {
    public static final double PI = 3.14; //     
 
    public static double getArea(double r) {
       return PI * r * r;
    }
 
    public static double getLength(double r) {
       return PI * r * 2;
    }
 
    public static void main(String[] args) {
 
       // Demo12.PI=300;         PI    
       System.out.println(Demo12.PI);
    }
}