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.メンバー内部クラス
4.静的内部クラス:
メンバー内部クラスと比較して、このクラスは直接定義できます.
外部クラスの静的メンバーが内部クラスのメンバー名と同じである場合、「クラス名.静的メンバー」から外部クラスの静的メンバーにアクセスできます.外部クラスの静的メンバーが内部クラスのメンバー名と異なる場合は、「メンバー名」を使用して外部クラスの静的メンバーを直接呼び出すことができます.
5.継承:
メソッドの書き換え,構造の前後順は先父類後子類である.
finalが使用されると、変数は変更できません.メソッドやクラスは継承できません.
6.書き換え方法(Source呼び出し)
TOStringメソッド書き換えがなければ、直接出力するのはそのアドレスです.
書き換えた後に出力されるのはその属性値です
equalメソッドは書き換えがなければ,2変数のアドレスを比較する.
書き換えた後に比較したのはその属性値です
7.タイプ変換
強制変換とinstanceof(2つが同じタイプに属するか否かを判断)
8.抽象:親が子クラスを制約するために使用するには、それらのクラスが必要であり、制約のみを行い、子クラスがどのように実現されるかに関心を持たない
abstract抽象クラスの定義
abstractは抽象メソッドを定義し,宣言のみで実現しない(実装しても実際の出力結果の影響はない)
抽象メソッドを含むクラスは抽象クラスに違いない
抽象クラスには一般的な方法があってもよいし,抽象的な方法を含まなくてもよい.
9.インタフェース
物事の本質に注目するときは抽象的なクラスを使います.操作に注目するときは、インタフェースを使用します.抽象クラスは、このオブジェクトが何であるかを表します.インタフェースは、このオブジェクトが何ができるかを表します.例えば、男、女、この2つの類、彼らの抽象類は人です.彼らはみな人間だと説明した.人は食べ物を食べることができて、犬は食べ物を食べることができて、あなたは“食べ物を食べる”を1つのインターフェースに定義することができて、それからこれらのクラスにそれを実現させます.だから、高級な言語の上で、1つのクラスは1つのクラス(抽象的なクラス)(人が同時に生物と非生物であることができないように)しか継承できなくて、しかし複数のインターフェース(食事のインターフェース、歩くインターフェース)を実現することができます.
[修飾子] class クラス名extends親 implentmentsインタフェース1インタフェース2
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();//
}
}