zoukankan      html  css  js  c++  java
  • Unit06

        Unit06 - 抽象类、接口和内部类(下) 、 面向对象汇总    

    1.多态:
      1)意义:
        1.1)同一类型的引用指向不同的对象时,有不同的实现
            行为的多态:cut()、run()、study()
        1.2)同一个对象被造型为不同的类型时,有不同的功能
            对象的多态:我、你、水
      2)向上造型:
        2.1)父类型的引用指向子类的对象
        2.2)能造型成为的类型: 父类、所实现的接口
        2.3)能点出来什么,看引用的类型
      3)强制类型转换,成功的条件只有两种:
        3.1)引用所指向的对象,就是该类型
        3.2)引用所指向的对象,实现了该接口
      4)若不符合如上两个条件,则ClassCastException类型转换异常
        建议在强转之前先通过instanceof来判断引用的对象是否是某种类型


    2.成员内部类:应用率比较低
      1)类中套类,外面的称为外部类,里面的称为内部类
      2)内部类通常只服务于外部类,对外不具备可见性
      3)内部类通常在外部类中创建
      4)内部类中可以直接访问外部类的成员(包括私有的)
        内部类中有个隐式的引用指向了创建它的外部类对象
           外部类名.this


    3.匿名内部类:
      1)若想创建一个类(子类)的对象,并且该对象只被创建一次,
        此时该类不必命名,称之为匿名内部类
      2)匿名内部类中访问外面的数据,该数据必须是final的

    4.面向对象三大特征:
      1)封装:
        1.1)类:封装的是对象的属性和行为
        1.2)方法:封装的是具体的业务逻辑功能实现
        1.3)访问控制修饰符:封装的是访问的权限
      2)继承:
        2.1)作用:代码的复用
        2.2)通过extends来继承
        2.3)子继承父后,具有:父+子
        2.4)单一继承、传递性
        2.5)继承类、实现接口
      3)多态:
        3.1)意义:行为的多态、对象的多态
        3.2)向上造型、强制类型转换、instanceof
        3.3)表现形式:
            3.3.1)重写
            3.3.2)重载

    程序设计规则:
    1)将公共的属性和行为抽象到父类中
    2)所有子类行为都一样------普通方法
      所有子类行为不一样------抽象方法
    3)符合既是也是原则时,使用接口
      部分子类共有,设计到接口中
      接口是对继承单根性的扩展

    println()-------是多态的(根据参数而多态)

    面试题:
    问:内部类有独立的.class吗?
    答:有

     成员内部类的演示

    InnerClassDemo.java

    package oo.day06;
    //成员内部类的演示
    public class InnerClassDemo {
        public static void main(String[] args) {
            Mama a = new Mama();
            //Baby b = new Baby(); //编译错误
        }
    }
    
    class Mama{
        private String name;
        Baby createBaby(){
            return new Baby();
        }
        class Baby{
            void showMamaName(){
                System.out.println(name);
                System.out.println(Mama.this.name);
                //System.out.println(this.name); //编译错误
            }
        }
    }

    多态演示

    UpDemo.java

    package oo.day06;
    //多态的演示
    public class UpDemo {
        public static void main(String[] args) {
            Aoo o1 = new Boo(); //向上造型
            Boo o2 = (Boo)o1; //o1指向的对象就是Boo类型
            Inter1 o3 = (Inter1)o1; //o1指向的对象实现了Inter1接口
            //Coo o4 = (Coo)o1; //ClassCastException类型转换异常
            if(o1 instanceof Coo){ //false
                Coo o5 = (Coo)o1;
            }
            System.out.println("over");
        }
    }
    
    interface Inter1{ }
    class Aoo{ }
    class Boo extends Aoo implements Inter1{ }
    class Coo extends Aoo{ }

    匿名内部类的演示

    NstInnerClassDemo.java

    package oo.day06;
    //匿名内部类的演示
    public class NstInnerClassDemo {
        public static void main(String[] args) {
            //1.创建了Inter2的一个子类,没有名字
            //2.为该子类创建了一个对象,叫o1
            //3.大括号中的为子类的类体
            Inter2 o1 = new Inter2(){
                
            };
            
            //1.创建了Inter2的一个子类,没有名字
            //2.为该子类创建了一个对象,叫o2
            //3.大括号中的为子类的类体
            Inter2 o2 = new Inter2(){
                
            };
            
            final int num = 5;
            Inter3 o3 = new Inter3(){
                public void run(){
                    System.out.println("abc");
                    System.out.println(num);
                }
            };
            o3.run();
            
        }
    }
    
    interface Inter3{
        public void run();
    }
    
    interface Inter2{
    }

     银联卡系统V-1.1.1

    UnionPay.java

    package oo.day06;
    //银联卡系统
    public class UnionPayTest {
        public static void main(String[] args) {
            
            ABCATM atm = new ABCATM(); //atm机对象
            UnionPay card = new ICBCImpl(); //银联卡--工行卡
            atm.insertCard(card); //插卡
            atm.payTelBill(); //支付电话费
            
        }
    }
    class ABCATM{ //农行ATM机
        private UnionPay card; //银联卡
        public void insertCard(UnionPay card){ //插卡
            this.card = card;
        }
        
        public void payTelBill(){ //支付电话费
            if(card instanceof ABC){ //农行卡
                ABC abcCard = (ABC)card; //强转为农行卡
                abcCard.payTelBill("12345678945", 500); //支付电话费
            }else{
                System.out.println("不是农行卡,不能支付电话费");
            }
        }
    
        public void getBalance(){ //查询余额
            System.out.println("当前余额为:"+card.getBalance());
        }
    }
    
    
    
    interface UnionPay{ //银联接口
        public double getBalance(); //查询余额
        public boolean drawMoney(double number); //取款
        public boolean checkPwd(String input); //检查密码
    }
    interface ICBC extends UnionPay{ //工行接口
        public void payOnline(double number); //在线支付
    }
    interface ABC extends UnionPay{ //农行接口
        public boolean payTelBill(String phoneNum,double sum); //支付电话费
    }
    
    class ICBCImpl implements ICBC{ //工行卡
        public double getBalance(){return 0.0;}
        public boolean drawMoney(double number){return false;}
        public boolean checkPwd(String input){return false;}
        public void payOnline(double number){}
    }
    class ABCImpl implements ABC{ //农行卡
        public double getBalance(){return 0.0;}
        public boolean drawMoney(double number){return false;}
        public boolean checkPwd(String input){return false;}
        public boolean payTelBill(String phoneNum,double sum){
            System.out.println("支付电话费成功");
            return true;
        }
    }
    UnionPay.java V1.1.1
  • 相关阅读:
    二分图的最大匹配
    染色法判定二分图
    kruskal求最小生成树
    prim算法求最小生成树
    floyd
    spfa算法
    bellman_ford
    Dijkstra
    文件操作_1-18 选择题
    会话控制_2-5 编程练习
  • 原文地址:https://www.cnblogs.com/tangshengwei/p/6185127.html
Copyright © 2011-2022 走看看