Java学習11日目

10777 ワード

継承:
  • 子は親の特徴と行為を継承し、子が親の様々な属性と方法を持つようにするか、または子が親から方法を継承し、子が親と同じ行為を持つようにする.

  • 継承されたプロパティ:
  • サブクラスは、親の非private属性、メソッド、コンストラクタを有します.
  • 子クラスは、親クラスを拡張できる独自の属性およびメソッドを持つことができる.
  • 子は自分のやり方で親の方法を実現することができる.
  • Javaの継承は単一の継承ですが、多重の継承が可能であり、単一の継承はサブクラスが1つの親しか継承できません.多重継承とは、例えばAクラスがBクラスを継承し、BクラスがCクラスを継承するので、関係によってCクラスがBクラスの親であり、BクラスがAクラスの親である.これはjava継承がC++継承とは異なる特性である.
  • クラス間の結合性が向上しました(継承の欠点は、結合度が高いとコード間のつながりをもたらします).
  • キーワードの継承:
  • extends-拡張(子は親の特性に加えて独自のものを拡張する)
  • 以前に使用したprivateキーワードは、プライベートであり、自分のサブクラスを含めて外部にアクセスできません.しかしprotectedキーワードを使用すると、布団類にアクセスでき、同時に保護されます.

  • Personクラスを定義します.
    package org.mobiletrain;
    public class Person {
        //protected        ,          
        protected String name;
        protected int age;
        
        public Person(String name,int age){
            this.name = name;
            this.age = age;
        }
        
        public String eat(){
            return String.format(name + "    ");
        }
        
        public String play(String gameName){
            return String.format(name + "   " + gameName);
        }
    }
    
  • superキーワード:superキーワードを使用して親コンストラクタsuper()を呼び出すには、コンストラクタの最初の行に学生クラスを定義する必要があります.注意:学生クラスにはextendsキーワードが使用されており、親(Personクラス)の共通属性を継承するために使用されています
  • package org.mobiletrain;
    public class Student extends Person {   
        private String classCode;
        
        public Student(String name,int age){
            super(name,age);// super       
        }
        
        public void setClassCode(String classCode){
            this.classCode = classCode;
        }
        
        public String study(){
            return String.format(classCode + "  "+ age + "  " + name + "    ");
        }
    }
    

    テスト前のクラス:
  • タイプ間でも強転
  • package org.mobiletrain.test;
    
    import org.mobiletrain.Person;
    import org.mobiletrain.Student;
    import org.mobiletrain.Teacher;
    
    public class StudentTest {
    
        public static void main(String[] args) {
            //          is-a  
            //                  
            //stu1 teach  person  ,               
            Person stu1 = new Student("  ", 20);
            Person teacher = new Teacher("  ", 30,"  ");
            
            //           
            ((Student) stu1).setClassCode("JavaEE");
            ((Teacher) teacher).teach("JAVA");
            
            //student   teach  ,        ,          
            //((Teacher) stu1).teach("    ");
        }
    }
    

    オブジェクト向けインスタンス:ATM
    まず個人口座クラスを定義します.
    package org.mobiletrain;
    
    /**
     *     
     * @author apple
     *
     */
    public class Account {
    
        private String id;        //  
        private double balance;  //  
        private String password;//  
        
        /**
         *    
         * @param id
         */
        public Account(String id,String password,double balance){
            this.id = id;
            this.password = password;
            this.balance = balance;
        }
        
        /**
         *         
         * @param password   
         * @return       true,    false
         */
        public boolean isValid(String password){
            return this.password.equals(password);
        }
        
        /**
         *   
         * @param money     
         */
        public void deposit(double money){
            balance += money;
        }
        
        /**
         *   
         * @param money     
         * @return       true,    false
         */
        public boolean withdraw(double money){//  
            if (money <= balance) {
                balance -= money;
                return true;
            }
            return false;
        }
        
        /**
         *     ID
         * @return   ID
         */
        public String getId() {
            return id;
        }
        
        /**
         *       
         * @return     
         */
        public double getBalance() {
            return balance;
        }
        
        /**
         *     
         * @param password   
         */
        public void setPassword(String password) {
            this.password = password;
        }
        
        
    }
    

    ATMクラスを定義するには、次の手順に従います.
    package org.mobiletrain;
    
    /**
     * ATM 
     * @author apple
     *
     */
    public class ATM {
    
        private Account currentAccount = null;
        //                           
        private Account[] accountsArray= {
                new Account("11223344","123123",1200),
                new Account("22334455","123456",3000),
                new Account("33445566","666666",5000)
        };
        
        /**
         *   
         * @param account     
         * @return       true,    false
         */
        public boolean readCard(String id){
            for (Account account : accountsArray) {
                if (account.getId().equals(id)) {
                    currentAccount = account;
                    return true;
                }
            }
            return false;
        }
        
        /**
         *     
         * @param password   
         * @return       true,    false
         */
        public boolean verify(String password){
            if (currentAccount != null) {
                return currentAccount.isValid(password);
            }
            return false;
        }
        
        /**
         *     
         * @return     
         */
        public double showBalance(){
            return currentAccount.getBalance();
        }
        
        /**
         *   
         * @param money
         */
        public void deposit(int money){
            currentAccount.deposit(money);
        }
        
        /**
         *   
         * @param money
         * @return 
         */
        public boolean withdraw(int money){
            return currentAccount.withdraw(money);
        }
        
        /**
         *     
         * @param newPassword    
         */
        public void changePassword(String newPassword){
            currentAccount.setPassword(newPassword);
        }
        
        /**
         *   
         */
        public void quitCard(){
            currentAccount = null;
        }
        
        /**
         *   
         * @param otherId     
         * @param money     
         * @return       true,    false
         */
        public boolean transfer(String otherId,double money){
            for (Account account : accountsArray) {
                if (account.getId().equals(otherId)) {
                    Account otherAccount = account;
                    if (currentAccount.getBalance() >= money) {
                        currentAccount.withdraw(money);
                        otherAccount.deposit(money);
                        return true;
                    }
                    else {
                        return false;
                    }
                }
            }
            return false;
        }
    }
    

    テストクラス:
    package org.mobiletrain.test;
    
    import java.util.Scanner;
    import org.mobiletrain.ATM;
    
    public class ATMtest {
    
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);             
            ATM atm = new ATM();
            boolean isRunning = true;
            while(isRunning){
                System.out.println("    XX  ATM ");
                System.out.print("      :");
                String id = input.next();
                atm.readCard(id);
                if (atm.readCard(id)) {
                    int counter = 0;
                    boolean isCorrect = false;
                    do{
                    counter += 1;
                    System.out.print("     :");
                    String password = input.next();
                    isCorrect = atm.verify(password);
                    }while(counter < 3 && !isCorrect);
                    if (isCorrect) {
                        boolean flag = true;
                        while(flag){
                            System.out.println("1.    ");
                            System.out.println("2.  ");
                            System.out.println("3.  ");
                            System.out.println("4.  ");
                            System.out.println("5.    ");
                            System.out.println("6.  ");
                            int choice;
                            do {
                                System.out.print("   :");
                                choice = input.nextInt();
                            } while (choice < 1 || choice > 6);
                            switch (choice) {
                            case 1: 
                                System.out.println("    :" + atm.showBalance());
                                break;
                            case 2:{//              (scope)
                                    //                     
                                System.out.print("     :");
                                int money = input.nextInt();
                                atm.deposit(money);
                                System.out.println("    !");
                                break;
                            }
                            case 3:{
                                System.out.print("          :");
                                int money = input.nextInt();
                                if (atm.withdraw(money)) {
                                    System.out.println("       ");
                                }
                                else {
                                    System.out.println("    !");
                                }
                                break;
                            }
                            case 4:{
                                System.out.print("       :");
                                String otherId = input.next();
                                System.out.print("       :");
                                double money = input.nextDouble();
                                if (atm.transfer(otherId, money)) {
                                    System.out.println("    ");
                                }
                                else {
                                    System.out.println("    ,                !");
                                }
                                break;
                            }
                            case 5:
                                System.out.print("      :");
                                String newPwd = input.next();
                                System.out.print("      :");
                                String rePwd = input.next();
                                if (newPwd.equals(rePwd)) {
                                    atm.changePassword(newPwd);
                                    System.out.println("     ");
                                }
                                else {
                                    System.out.println("         .");
                                }
                                break;
                            case 6:
                                System.out.println("       ");
                                flag = false;
                                break;
                            }
                        }
                    }
                    else {
                        System.out.println("          3 ,      ");
                    }
                }
            }
            input.close();
        }
    }