java面向对象三大特征

一.封装

  • 封装:对对象的访问权限加以控制,尽量隐藏对象内部的实现细节.(get/set是唯一的访问通道).

  • 访问修饰符:private-私有的[本类之中]

  • 语法:

    //1.属性私有化
    private 数据类型 属性名;
    //2.设置公开方法
    //-设置值
    public void set属性名(数据类型 属性名){
        this.属性名=属性名;
    }
    //-获取值
    public 数据类型 get属性名(){
        return 属性名;
    }
    

二.继承

  1. 生活中的继承:施方的赠与,受方的获得

  2. 程序中的继承:是一种机制,体现类与类之间的"is a"/"is an"关系,只要类满足 子类 is a 父类,子类可以直接访问父类中的属性和方法

    表现:把一组相同或者相似的类中的共性的属性和方法抽取出来(保留程序关注的部分),定义在父类中,实现代码的重用.

    抽象父类的原则:--动物--生物--物质--对象
    功能越精细,和子类的重合点越多,越接近直接父类
    功能越粗略,和子类的重合点越少,越接近于Object
    
  3. 语法

    class 类名 extends 父类类名{}
    满足继承关系,子类可以访问父类中的属性和方法--代码重用性
    子类也可以访问自己特有的属性和方法--代码延展性
    //java是单继承的,但是可以多级继承,属性和方法逐级叠加
    

    不可被继承的

    • 构造方法不能被继承
    • 私有的属性和方法不能被继承,不能被子类直接访问
    • 非同包子类default修饰的属性和方法不能被继承
  4. 访问修饰符(public private (default)默认的 protected)

    本类之中同包子类同包非子类非同包子类非同包非子类
    private××××
    default××
    protected×
    public
  5. 方法覆盖—方法重写

    **概念:**当类中的方法无法满足子类的需求时,需要在子类中定义重名的方法进行方法覆盖.

    **语法:**方法名相同,参数列表相同,返回值类型相同,访问修饰符相同或者更宽

    **注:**完成方法覆盖后,子类优先使用覆盖后的方法

    面试重点:方法重载和方法重写的区别?/overload和override的区别?

    方法重写:方法名相同,参数列表相同,返回值类型相同,访问修饰符相同或者更宽

    方法重载:方法名相同,参数列表不同(参数个数,参数类型,参数类型的排列顺序),和返回值访问修饰符无关

  6. super

    **super:**当前对象的父类对象

    • super.属性名/super.方法名(参数)
      • super.属性名:当前对象的父类对象的属性,使用super区分本类属性和父类属性
      • super.方法名(参数):当前对象的父类对象的方法.使用super区分父子类间覆盖前后的方法
    • super(参数):调用本类的父类中的构造方法
      • uper()必须放在构造器中的第一行有效语句,且不能和this()同时使用
      • 如果一个子类的构造方法中不存在super(参数),系统默认添加super();
  7. 对象的创建过程

    • 开辟父子类空间,给所有属性默认值
    • 创建父类对象(递归创建–1.初始化属性2.执行构造方法进行属性赋值)
    • 给属性赋予初始值
    • 使用构造方法进行赋值

三.多态

  1. 概念:

    • 生活中的多态:客观事物在人脑中的主观反应,必须is a关系

    • 程序中的多态:父类引用指向子类对象.

      Animal a=new Dog();
      //形成多态后,父类引用可以访问定义在父类中的属性和方法,不能访问定义在子类中特有的属性和方法
      //父类引用调用的方法如果被子类覆盖,优先执行子类覆盖后的方法
      
      • 编译时多态:父类引用可以指向多种子类对象
      • 运行时多态:对同一个类型引用调用相同的方法,实现方式不同
  2. 多态的应用:

    • 多态用在参数上:可以接收 本类型+所有子类型 的实参
    • 多态用在返回值上:可以返回 本类型+所有的子类型 的数据
  3. 拆箱和装箱

    • 装箱:父类引用指向子类对象(多态)–自动;向上转型

      Animal a=new Cat();
      
    • 拆箱:将父类引用转为子类类型–强转;向下转型

      Cat c=(Cat)a;
      

      **注:**父类引用转为子类引用后.可以访问子类中独有的属性和方法

      在进行拆箱操作时,如果拆箱类型不是父类引用指向的真实类型,运行时时发生类型转换异常

      (java.lang.ClassCastException:类 can not cast to 类)

      Aniaml a=new Dog();
      Cat c=(Cat)a;
      
  4. instanceof:防止类型转换异常的发生

    • 语法

      引用名/对象名 instanceof 类型:可以判断对象名指向的对象是否是后面的类型
      true:属于/false:不属于/不是
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值