Java学習の過ち(二)

7785 ワード

1.外部クラスと内部クラス
1) 外部クラスは内部クラスを直接使用できないメンバーとメソッド滴です.
2)外部クラスと内部クラスが同じメンバー変数またはメソッドを持つ場合、内部クラスはデフォルトで自分のメンバー変数またはメソッドにアクセスし、外部クラスのメンバー変数にアクセスする場合はthisキー外部クラスクラスクラス名を使用することができる.this.
例:this.HelloWorld.name    
3)内部クラスと外部クラスが同じメンバー変数またはメソッドを持たない場合は、使用を直接宣言できます.
2.パッケージ
一.パッケージの役割:Javaファイルを管理し、同名ファイルの衝突を解決する  二.定義パッケージ:packageパッケージ名//Javaソースプログラムの最初の行のパッケージ名の間に置く必要があります.「.」を使用して3つを区切ることができます.システム内のパッケージ:java.(機能).(クラス)java.lang.(クラス)Java言語ベースのクラスjava.util.(クラス)Java言語内の各種ツールクラスjava.io.(クラス)  入力、出力に関する機能を含むクラス4.パッケージの使用:1.importキーワードを使用することで、あるファイルで他のファイルのクラス2.Javaを使用することができます.パッケージの命名規範は全小文字スペルです.3.使用するときは、あるパッケージの下のすべてのファイルeg:com.imooc.*をロードするだけでなく、特定のサブパッケージの下のすべてのファイルをロードすることもできます.
3.メンバー内部クラス
//   HelloWorld
public class HelloWorld{
    
    //        name
    private String name = "imooc";
    
    //        
    int age = 20;
    
	//     Inner
	public class Inner {
		String name = "   ";
        //       
		public void show() { 
			System.out.println("     name:" +  HelloWorld.this.name); //                   
			System.out.println("     name:" +  name);
			System.out.println("     age:" + age);
		}
	}
    
	//       
	public static void main(String[] args) {
        
        //        
		HelloWorld o = new HelloWorld (); 
        
        //                         
		Inner inn = o.new Inner();    
        
        //        show  
		inn.show();
	}
}

4.静的内部クラス:
メンバー内部クラスと比較して、このクラスは直接定義できます.
外部クラスの静的メンバーが内部クラスのメンバー名と同じである場合、「クラス名.静的メンバー」から外部クラスの静的メンバーにアクセスできます.外部クラスの静的メンバーが内部クラスのメンバー名と異なる場合は、「メンバー名」を使用して外部クラスの静的メンバーを直接呼び出すことができます.
//   
public class HelloWorld {
    
    //          score
    private static int score = 84;
    
    //        
	public static class SInner {
        //        score
        int score = 91;
        
		public void show() {
			System.out.println("       score:" + HelloWorld.score);
			System.out.println("       score:" + score);
		}
	}

	//        
	public static void main(String[] args) {
		//           
        SInner si = new SInner();
        
        //   show  
		si.show();
	}
}

5.継承:
メソッドの書き換え,構造の前後順は先父類後子類である.
finalが使用されると、変数は変更できません.メソッドやクラスは継承できません.
package com;//   com

public class inital {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	  Animal animal = new Animal();
	  System.out.println(animal.age);
      Dog dog = new Dog();//           
      //dog.age=10;//  
      dog.name="xiaotian";
      //dog.eat();//  
      //dog.method();
	}

}
package com;

public class Animal {  //final
	public int age=20;
	public String name;
	/*public Animal()//final public Animal()    final                           public void Animal       
	{
		System.out.println("Animal   ");
		age=10;
	}*/
	/*public Animal(int a)         //       
	{
		System.out.println("Animal   ");
		age=10;
	}*/
	public void eat() {               
		//final int a=20;
		//a=10;
		System.out.println(name+"          ");
	}

}
package com;

public class Dog extends Animal {
	public int age=200;
	public Dog(){
		//super(); super               ,                  
		System.out.println("Dog   ");
	}
	public void eat() {     //     
		System.out.println(name+"         ");
	}
	public void method(){
		//System.out.println(age);
		System.out.println(super.age);
	}
}

6.書き換え方法(Source呼び出し)
TOStringメソッド書き換えがなければ、直接出力するのはそのアドレスです.
書き換えた後に出力されるのはその属性値です
equalメソッドは書き換えがなければ,2変数のアドレスを比較する.
書き換えた後に比較したのはその属性値です
7.タイプ変換
強制変換とinstanceof(2つが同じタイプに属するか否かを判断)
package project3;

public class Animal {
   public void eat()
   {
	   System.out.println("111Animal");
   }
}
package project3;

public class Cat extends Animal {

}
package project3;

public class Dog extends Animal {
	 public void eat()
	   {
		   System.out.println("222Dog");
	   }
}
package project3;

public class Initial {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
      /*  Animal a1 = new Animal();
        Animal a2 = new Dog();  //             
        Animal a3 = new Cat();
        a1.eat();
        a2.eat();
        a3.eat();
        //    Dog    a3 = new Animal();
         */
        Dog dog = new Dog();
        Animal animal = new Dog();//       ,         
       
       // Cat cat = (Cat) animal; //1     Cat    2    Dog  
       if(animal instanceof Dog) {
    	 Dog dog2 = (Dog)animal; //         
       }
       else {
    	   System.out.println("        Dog"); 
       } 
       if(animal instanceof Cat) {
    	 Cat cat = (Cat)animal; //         
       }
       else {
    	   System.out.println("        Cat");
    	 
       }
    	   

	}

}

8.抽象:親が子クラスを制約するために使用するには、それらのクラスが必要であり、制約のみを行い、子クラスがどのように実現されるかに関心を持たない
abstract抽象クラスの定義
abstractは抽象メソッドを定義し,宣言のみで実現しない(実装しても実際の出力結果の影響はない)
抽象メソッドを含むクラスは抽象クラスに違いない
抽象クラスには一般的な方法があってもよいし,抽象的な方法を含まなくてもよい.
package project4;

public abstract class Telephone {
	public abstract void message();
}
package project4;

public class Smartphone extends Telephone {

	@Override
	public void message() {
		// TODO Auto-generated method stub
        System.out.println("Smartphone message");
	}

}
package project4;

public class phone extends Telephone {
   public  void message() {
	   System.out.println("Telephone message");
   }

}
package project4;

public class Initial {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        phone p1 = new phone();
        Smartphone p2 = new Smartphone();
        p1.message();
        p2.message();
	}

}

9.インタフェース
物事の本質に注目するときは抽象的なクラスを使います.操作に注目するときは、インタフェースを使用します.抽象クラスは、このオブジェクトが何であるかを表します.インタフェースは、このオブジェクトが何ができるかを表します.例えば、男、女、この2つの類、彼らの抽象類は人です.彼らはみな人間だと説明した.人は食べ物を食べることができて、犬は食べ物を食べることができて、あなたは“食べ物を食べる”を1つのインターフェースに定義することができて、それからこれらのクラスにそれを実現させます.だから、高級な言語の上で、1つのクラスは1つのクラス(抽象的なクラス)(人が同時に生物と非生物であることができないように)しか継承できなくて、しかし複数のインターフェース(食事のインターフェース、歩くインターフェース)を実現することができます.
[修飾子]   class   クラス名extends親   implentmentsインタフェース1インタフェース2
1つのクラスが抽象クラスを継承する場合、継承の抽象メソッドを実装する必要があります.インタフェースであれば、インタフェース内のメソッドを実装します.
package project7;

public abstract class Telephone {
    public abstract void message();   //   
}
package project7;

public interface Iplaygame {   //  
    public void play();
}
package project7;

public class Psp implements Iplaygame {//      

	@Override
	public void play() {
		// TODO Auto-generated method stub
      System.out.println("PSP play");
	}

}
package project7;

public class Smartphone extends Telephone implements Iplaygame {
//             
	@Override
	public void play() {
		// TODO Auto-generated method stub
        System.out.println("Smart play");
	}

	@Override
	public void message() {
		// TODO Auto-generated method stub
        System.out.println("Smart message");
	}

}
package project7;

public class Initial {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Iplaygame ip1 = new Psp();
        ip1.play();
        Iplaygame ip2 = new Smartphone();
        ip2.play();
        //ip2.message();           Iplaygame    message  
        Smartphone ip3 = new Smartphone();
        ip3.play();
        ip3.message();//   
        
        
	}

}