美文网首页
5.面向对象三大特征

5.面向对象三大特征

作者: 星野君 | 来源:发表于2022-04-25 14:11 被阅读0次

    面向对象编程有三大特征:封装、继承和多态。
    一、封装

    • 封装的优点
    1. 良好的封装能够减少耦合。
    2. 类内部的结构可以自由修改。
    3. 可以对成员变量进行更精确的控制。
    4. 隐藏信息,实现细节。

    实例:

    get/set

    public class Person{
        private String name;
        private int age;
    
        public int getAge(){
          return age;
        }
    
        public String getName(){
          return name;
        }
    
        public void setAge(int age){
          this.age = age;
        }
    
        public void setName(String name){
          this.name = name;
        }
    }
    

    idea快捷键:alt+insert

    二、继承
    继承可以解决代码复用,让我们的编程更加靠近人类思维.当多个类存在相同的属性(变量)和方法时,可以从这些类中 抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过 extends 来 声明继承父类即可。

    • 继承的基本语法:
    class 子类 extends 父类{}
    
    • 继承给编程带来的便利:
    1. 代码的复用性提高了
    2. 代码的扩展性和维护性提高了
    • 细节:
    1. 子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问, 但是私有属性和方法不能在子类直接访 问,要通过父类提供公共的方法去访问
    2. 子类必须调用父类的构造器, 完成父类的初始化
    3. 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无 参构造器,则必须在子类的构造器中用 super 去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过
    4. 如果希望指定去调用父类的某个构造器,则显式的调用一下 : super(参数列表)
    5. super 在使用时,必须放在构造器第一行(super 只能在构造器中使用)
    6. super() 和 this() 都只能放在构造器第一行,因此这两个方法不能共存在一个构造器
    7. java 所有类都是 Object 类的子类, Object 是所有类的基类
    8. 父类构造器的调用不限于直接父类!将一直往上追溯直到 Object 类
    9. 子类最多只能继承一个父类(指直接继承),即 java 中是单继承机制 (可以使用接口)
    • 方法重写/覆盖(override)
    1. 子类重写父类的方法,返回类型、方法名和参数列表必须完全一致。
    2. 子类重写方法不能缩小父类方法的访问权限

    三、多态

    1. 多态基于封装和继承的基础之上,
    2. 编译类型定义对象时就已经确定不能改变
    3. 运行内存是可以变化的
    4. 编译类型看=左边,右边是运行内存
    public class Animal { public void cry() { System.out.println("Animal cry() 动物在叫...."); } }
    
    public class Cat extends Animal { public void cry() { System.out.println("Cat cry() 小猫喵喵叫..."); } }
    
    public class Dog extends Animal { public void cry() { System.out.println("Dog cry() 小狗汪汪叫..."); } }
    
    public static void main(String[] args) { 
    //体验对象多态特点 //animal 编译类型就是 Animal , 运行类型 Dog 
    Animal animal = new Dog(); //因为运行时 , 执行到改行时,animal 运行类型是 Dog,所以 cry 就是 Dog 的 cry animal.cry(); //小狗汪汪叫 
    //animal 编译类型 Animal,运行类型就是 Cat 
    animal = new Cat(); animal.cry(); //小猫喵喵叫 
    }
    

    多态的向下转型:

    Cat cat = (Cat) animal; 
    cat.catchMouse();
    

    向上转型:

    Ananimal animal  = new cat();
    Object obj = new Cat();
    
    • 动态绑定机制
    1. 当调用对象方法的时候该方法会和该对象的内存地址绑定
    2. 调用属性没有绑定机制,哪里声明哪里使用
    • 多态参数
      当方法参数是父类的时候,调用该方法可以传入该父类的任意子类。

    相关文章

      网友评论

          本文标题:5.面向对象三大特征

          本文链接:https://www.haomeiwen.com/subject/dxnrsrtx.html