zoukankan      html  css  js  c++  java
  • java中的继承 和多态。

    package com.aaa.zxf.ajax.test;
    
    /**
     *一、 java 中的继承和多态。
     *
     * 继承的特性?
     * 1.实现继承的方式
     *    A 如何建立继承关系(一个类继承于 另一个类   子类 继承 父类 )
     *
     *   【修饰符】 class 类名(子类) extends 类名(父类){
     *
     *   }
     *
     * B 子类继承父类 就可以使用父类的成员变量和方法(局限性 权限修饰需要满足)
     *   注意: 面试题 私有的属性和方法能不能被继承?
     *          答案:不能 因为无法调用
     *                  能  但是无法调用
     *
     * 2.继承的关系
     *      在java中 类和类之间是单继承关系(一个类只能继承一个父类)
     *
             *   类  和 类     单继承
             *   类  和 接口   多实现
             *   接口和 接口   多继承
     *
     * 3.默认的继承
     *      如果一个类没有写 extends 默认继承于 Object(鸡肋 基类)
     *
     *
     * 二、 方法的重写
     *          子类有一个方法 和 父类一模一样 称之为 子类重写了父类的方法
     *
     * 思考题:为什么要重写?
     *         因为 有可能父类的方法,满足不了子类的需求 所以子类需要对父类的方法进行重写。
     *
             * 如何验证是否对父类的方法重写成功呢?
             * 万一 父类的使getObejct 子类重写 get0bject()
             * 在方法的上面添加 @Override 注解 这个注解或帮我们验证是否重写成功 如果不成功会报错
    
     * 三、java 中的多态
     *
     *    1.多态就是多种状态  (何为多种状态)
     *
     *    2.如何产生多态?
     *      多态的分类分为  继承多态 和 接口多态。
     *
     *      继承多态:父类的类型  对象名  =  new 子类();
     *
     *      Animal a = new Dog();
     *     (用父类的类型 引用子类的对象)
     *
     *      接口多态: 接口类型 对象名 =  new 实现类();
     *      (用接口类型 引用实现类的对象)
     *
     *    3.多态的解读
     *          解读1: 代码分成两个时期 :编译时期 运行时期
     *          多态相当于在不同的时期 状态是不一样的。
     *
     *    4. 为什么要有多态?
     *
     *    解耦:解除(降低)代码之间的耦合性 (代码侵入 )
     *    我们编写程序的愿景:高内聚 低耦合
     *    多态这个知识点就是用来 解耦的。
     *
     *  四、 控制反转 和 IOC DI 注入。
     *  
     *      连接:有介绍。。
     *      https://blog.csdn.net/jisuanjiguoba/article/details/81532965
    
     */
    public class JavaJiCheng01 {
        public static void main(String[] args) {
    
            Animal animal = new Animal();
            animal.run();   // animal 调用自己的 run方法
    
            /**
             * 多态开始
             *
             * new 的是什么类型 就说明这个对象是什么
             * 调用方法的时候 是根据对象的真实类型去调用
             */
    
            String ah= "sdf";
    
            StringBuffer a =new StringBuffer();
    
    
           //前父后子    animal01  两个状态
           Animal animal01 = new Dog();
                  animal01 = new Cat();
    
           animal01.run();      // 运行时 调用的是 cat 的run 方法。。
           animal01.name = "二哈";  // 调用父类的公共属性
    
        }
    }
    
    // 在动物类中声明 id 和 name 创建一个类 Aniaml类 动物类
    class Animal{
        public int id;
        public String name;
        private  int age;
    
        void run(){
            System.out.println("动物要吃饭");
        }
    }
    
    //  让狗和猫继承与 动物类(狗单独添加food 猫单独添加color)
    class  Dog extends  Animal{
        public  String food;
    
        @Override    //添加这个注释  未报错  重写成功。
        void run(){
            System.out.println("狗吃骨头");
        }
    
    }
    
    class Cat extends Animal{
        public String color;
    
        @Override
        void run(){
            System.out.println("猫吃鱼");
        }
    }
    
    
    class Pig{
        void  eat(){
            System.out.println("pig eat food");
        }
    }
    
    /**
     * 将pig对象 当成参数传到people的 feed函数中。 再去调用 eat 函数
     *
     * 模拟 控制反转 IOC  di 依赖注入
     * 在一个类中 通过参数获取另一个 类的对象。
     */
    
    // 人类 喂养 猪的方法
    class Pepple{
        void  feed(Pig pig){
            pig.eat();
        }
    }
  • 相关阅读:
    后序非递归遍历二叉树的应用
    关于驰骋工作流程引擎,工作流程管理系统演示与学习环境发布的通知。
    驰骋工作流程引擎,ccflow,如何把子线程的数据汇总到合流节点表单中去?
    关于取消ccflow abc 级别用户与开放表单设计器源代码的通知
    驰骋工作流程引擎问题解答,武汉朋友。
    ccform 单据打印的规则调整与新增功能发布说明
    发几个傻瓜表单设计器预览图片,以方便大家学习.
    关于工作流程管理系统中的现有版本自由表单设计器的停止升级与新版本将要发布的声明.
    ccflow向流程开始节点表单传输数据方法大全
    利用开源的驰骋工作流程引擎,处理的集团公司流程应用案例之一.
  • 原文地址:https://www.cnblogs.com/ZXF6/p/11533576.html
Copyright © 2011-2022 走看看