think in java手記(一)

3852 ワード

仕事の合間に、何をするか分からない.やるべきことはすべて完成する差は多くなくて、springのものを見たいです.結局、これらのものはたくさん使います.でもまたjavaeeについて見たいのですが、この中のデザインパターンが多いです.しばらく考えて、これらはすべてツールにほかならないと思って、javaこそ基礎です.突然大学の时、先生の推荐する《think in java》を思い出して、前に1回见て、ぼんやりしていて、今更に见て、仕事の学习の中の経験を结び付けて、いくつか异なっているものを収获することができるかもしれません.
(一)クラスとメンバーのアクセス権について
冒頭ではjavaクラスとメンバーの範囲とアクセス権,public,private,protected,friendlyについて述べた.
先日、仕事で、あるモデルを使うとき、どうしてもエラーが発生し、存在しないことを示すツールクラスを作成し、新しいクラスを構築することを提案しました.エディタに問題があると思っていたが、モデルクラスを見てみると、クラスはこのように定義されていた.
class mymodel{
....
}

これはデフォルトfriendlyのクラスで、私のツールクラスとはパッケージの下にないので、このクラスにアクセスできないので、エラーを報告します.
(二)相続について
データ型を作成するのに苦労した後、ほぼ同じ機能を実現するために新しいタイプを作成しなければならないと、非常にがっかりします.しかし,既存のデータ型を用いて「クローン」を行い,状況に応じて追加・修正を行うことができれば,より望ましい.「継承」はまさにこの目標に対して設計されたものである.しかし、継承はクローンに完全に等価ではありません.
新しい派生クラスと元のベースクラスを区別するには、2つの方法があります.1つ目の方法は、派生クラスに新しい関数(機能)を追加することです.extendsキーワードは、インタフェースの新しい機能を「拡張」することを示唆していますが、実際にはそうではありません.私たちの新しいクラスを区別するために、2つ目の方法は、基礎クラスの既存の関数の動作を変更することです.私たちはそれを「改善」という関数と呼んでいます.
(三)向上転換()
これは、長い間困惑していましたが、主にこのものが少なすぎるからです.
本の中のコードを結びつけて、私もここに1段書いて、形(Shape)と円形(Circle)について.
package com.thinkinjava.unit1;

public class Shape {
    public void move(Shape shape){
        System.out.println(shape.getClass().getName()+", move ...");
    }
    public void draw(Shape shape){
        System.out.println(shape.getClass().getName()+", draw ....");
    }
    
    public void doStuff(Shape shape){
        shape.move(shape);
        shape.draw(shape);
    }
    
}

ここでは、汎用的な形状が持つ方法を規定している.
私たちが書いたShapeを継承するCircleを書きます.
package com.thinkinjava.unit1;

public class Circle extends Shape {
    
}

何もしないで、基礎クラス(Shape)を派生しました.
次にmainメソッドを書きます.
package com.thinkinjava.unit1;

public class Main {
    public static void main(String[] args) {
        Circle circle=new Circle();
        circle.doStuff(circle);
    }
}

このように、アップグレードを実現するのは、本の中で言う「アップトレース造形」です.
ここでのCircle circle=new Circle()はShape circle=new Circle()と書くことができます.しかし後者は人を混乱させやすい.
実行結果:
com.thinkinjava.unit1.Circle, move ...com.thinkinjava.unit1.Circle, draw ....
この構造は鮮明で,メソッドにベースクラスタイプを渡し,入れるパラメータタイプは,そのベースクラスから継承しなければならない.
正直、この技術の応用シーンは、今まで触れたことがありません.本では,このベースクラスをパラメータタイプとして渡すのは,具体的なサブクラスへの伝達を防止するために,より多くのサブクラスコードを書き直すためである.
具体的にもっとイメージの応用シーンがあって、分かることがあることを望んで、教えてあげることができます.