Javaの3つの特徴のパッケージ、継承、マルチステート

5779 ワード

パッヶージとくせい
  • パッケージ性生成の目的:一部の属性と方法を外部に見られないように保護する
  • カプセル化の実装:属性と方法のカプセル化はキーワードprivateによって宣言された
  • である.
  • パッケージ属性が外部にアクセスする場合、その属性にsetメソッドとgetメソッド
  • を設定することができる.
    匿名オブジェクト
  • 匿名オブジェクトは名前のないオブジェクトであり、プログラムで一度だけオブジェクトを使用すれば、オブジェクトのメソッド
  • を使用することができる.
  • 匿名オブジェクトが実行するとJCゴミ回収メカニズムにより
  • が自動回収される.
    class A{
        public void say() { 
        }
    }
    public class Demo3 {
        public static void main(String[] args) {
            new A().say();//     
        }
    }
    
    
    継承プロパティ
  • 基本概念:親の機能を拡張する
  • キーワード:extendsたとえばclassサブクラスextends親クラス
  • 継承の制限
  • Javaでは単一継承のみが許可されています.つまり、親クラスは1つしか継承できませんが、複数のインタフェース
  • を実現できます.
  • 子クラスは親クラスのプライベートメンバーに直接アクセスできず、setとgetメソッドで
  • にアクセスできます.
    メソッドオーバーライド
  • メソッド名は同じで、パラメータタイプまたは個数は異なる
  • 権限に対する要求がない
  • は1つのクラスで発生する
  • である.
  • Overloading
  • メソッド書き換え
  • 子クラスは、親クラスのメソッド名、戻りタイプ、パラメータが完全に同じであるメソッドを実現します.
  • 書き換え方法の親よりも厳格な権限を持つことはできない
  • .
  • は継承中
  • に発生する.
  • Overriding
  • superキーワード
  • サブクラスオブジェクトは、書き換えられた親メソッドにアクセスしないが、サブクラス書き換えメソッドでsuperキーワードで親メソッド
  • を強制的に呼び出すことができる.
  • 構築メソッドのデフォルトにはsuperメソッド
  • があります.
  • superキーワードは、必ずしも書き換えで使用されるとは限らず、それらのメソッドが親から継承され、その親でメソッドの原理を探すことを示すこともできる.
  • class A{
        public void say() { 
            System.out.println("A->say");
        }
    }
    
    class B extends A{
        public void say() {
            super.say();
            System.out.println("B->say");
        }
    }
    public class Demo3 {
        public static void main(String[] args) {
            B b = new B();
            b.say();
        }
    }
    
    たじょうたいとくせい
    アップ・モデルチェンジとダウン・モデルチェンジ
  • アップコンバート:サブクラスオブジェクトを作成して親インスタンスegに割り当てる:親親インスタンス=newサブクラス()
  • ダウンシフト:ダウンシフトeg:サブクラスサブクラスインスタンス=(サブクラス)親インスタンスを使用するには、アップシフトしてから使用する必要があります.
  • マルチステートとは
  • は、その名の通り多様な状態であり、コードをある程度柔軟にする.
  • マルチステートとは、1つの参照(タイプ)が異なる場合の複数の状態を指す.マルチステートは、親クラスへのポインタを指すことによって、異なるサブクラスで実装される方法を呼び出すことも理解できる.
  • 上への転換と下への転換を理解した後、多態を議論すれば理解できます.まず、次のコードを見てください.
  • public class Demo3 {
    
        public static void main(String[] args) {// TODO Auto-generated method stub
            //    
            Animal an = new Dog();
            an.say();  //                    
            an.tell1(); 
        
            //    
            Cat cat = (Cat) an;
            cat.say();
            cat.tell1;
        }
    
    }
    
    class Animal{
        public void say(){
            System.out.println("    ");
        }
        public void tell1(){
            System.out.println("     ");
        }
    }
    
    class Dog extends Animal{
        //      
        public void say() {
            System.out.println("   ");
        }
        public void tell2(){
            System.out.println("    ");
        }
    }
    
    class Cat extends Animal{
        public void say() {
            System.out.println("   ");
        }
    }
    
    出力:
    私は犬の動物が話しています.私は猫の動物が話しています.
    具体的な応用分析
    public class Demo2 {
    
        public static void main(String[] args) {
            Manager manager = new Manager();
            // new   ,                    
            manager.feed(new Dog(), new Bone("  "));
            manager.feed(new Cat(), new Fish(" "));     
            manager.feed(new smallDog(), new smallBone("   "));
        }
    
    }
    //   
    class Manager{
        //        ,          , main              
        public void feed(Animal an,Food food){                   
            an.eat(food);
            food.showFood(food);
        }
    }
    //   
    class Food{
        //    
        public Food(String name) {
            this.name = name;
        }
        private String name;
        public void setName(String name){
            this.name = name;
        }
        public String getName(){
            return name;
        }
        public void showFood(Food food){
            System.out.println("  "+ food.getName());
        }
    }
    //  
    class Fish extends Food{
        //                    
        public Fish(String name) {
            super(name);
        }
    
        public void showFood(Food food) {
            System.out.println("  " + food.getName());
        }
    }
    //   
    class Bone extends Food{
        public Bone(String name) {
            super(name);
        }
    
        public void showFood(Food food) {
            System.out.println("  " + food.getName());
        }
    }
    //     
    class smallBone extends Bone{
    
        public smallBone(String name) {
            super(name);
        }
        public void showFood(Food food) {
            System.out.println("  " + food.getName());
        }
    
    }
    //   
    class Animal{
        private String name;
        private int age;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        
        public void eat(Food food) {
            System.out.println("  " + food.getName());
        }
    }
    //  
    class Dog extends Animal{
        public void eat(Food food){
            System.out.println("  " + food.getName());
        }
    }
    //  
    class Cat extends Animal{
        public void eat(Food food) {
            System.out.println("  " + food.getName());
        }
    }
    //    
    class smallDog extends Dog{
        
        public void eat(Food food){
            System.out.println("    " + food.getName() );
        }
    }
    
    出力:
    骨を食べて私は骨の猫は魚を食べて私は魚の子犬の犬は骨を食べて私は小さな骨です
    instanceofキーワード
  • は、instanceofキーワードによって、1つのオブジェクトがクラスであるか否かを判断することができるインスタンス
  • である.
    public class Demo3 {
    
        public static void main(String[] args) {// TODO Auto-generated method stub
            //    
             A a = new A();
             System.out.println(a instanceof A);//  true
             System.out.println(a instanceof B);//  false
             A a1 = new B();
             System.out.println(a1 instanceof A);//  true
             System.out.println(a1 instanceof B);//  true
        }
    
    }
    
    class A{
    }
    class B extends A{}
    
  • 上記のコード例により、その親のオブジェクトはその子のインスタンスではないことが分かるが、その子のオブジェクトは親列のインスタンス
  • であってもよい.