staticキーワードと継承
一、staticキーワード
オブジェクト間の重複属性のデータ共有を実現するために、主にクラスのメンバーを修飾するために使用されます.
1.メンバー変数
1)非静的メンバー変数:アクセスするオブジェクトを作成する必要があります
2)静的メンバー変数:クラス名を使用して直接呼び出すか、オブジェクトからアクセスできます.
2.メンバーメソッド
クラス名を使用して直接呼び出すことができます
2.1静的関数:
1)静的関数では非静的メンバー変数にアクセスできず、静的変数のみにアクセスできます.
2)静的メソッドはthis、superキーワードを定義できない
3)静的はオブジェクトより優先的に存在し、静的方法ではthisがあってはならない
2.2非静的関数:静的メンバー変数にアクセスできる非静的関数
3. 特長
1)静態はクラスのロードに伴ってロードされ、クラスが消えるにつれて消える
2)オブジェクトの存在よりも優先される,すなわち静的に先に存在し,オブジェクトの後に存在する.
3)すべてのインスタンス(オブジェクト)で共有
4)クラス名で直接呼び出すことができる
例
オブジェクト間の重複属性のデータ共有を実現するために、主にクラスのメンバーを修飾するために使用されます.
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
1)is a ( )
2)has 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);
}
}