java中的继承 和多态。
阅读原文时间:2022年04月03日阅读:1

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();
}
}