8.面向对象权限修饰符重写多态强转

权限修饰符

访问对象成员的权限

修饰符 本类 同包类 不同包子类 不同包类


private Y
default Y Y
protected Y Y Y
public Y Y Y Y

可以被访问的权限 Y=yes

public一览无遗;

protected:子承父业(儿子自己使用):

default:家庭和睦

private:占为己有

对于class的权限修饰只能有public和default,public类可以在任意地方访问,default只可以在同包被访问.

  1. 属性尽可能私有化 private

  2. 访问器:访问器:srtter与getter访问器 >private,一般public居多

SetterXxx:存储 与 getterXxx:查看

扫描二维码关注公众号,回复: 6212080 查看本文章

注意

  1. 以上四个权限修饰符只能用来修饰方法和成员变量

  2. 修饰类的只能有public和default(省略)

  3. 在被private修饰的内容不能被继承,只能本类中使用

能够使用protected的两种情况

  1. 同包类

  2. 不同包的子类中可以访问,并且需要通过继承关系访问

面向对象的设计原则之一:

开闭原则:对修改关闭,对扩展开放,不对父类源代码进行修改,而是通过子类增加新的功能,因为不知道该父类的方法在什么代码里有被使用

重写

重载 overload 与重写 override的不同

重载 overload: 同一类中 多个方法名字相同,参数列表不同

重写 override:不同的类 需要继承关系 方法签名都相同(方法名(参数))

检查重写方法的方式:

  1. 重写方法的左侧会有一个向上的三角

  2. 在重写方法的上面添加一个@Override

方法的重写原理

  1. 继承父类中原方法的结构,但是可以对方法的实现进行扩展

  2. 方法一旦存在重写,调用这个方法的时候,子类会对父类的方法进行屏蔽,因为会发生就近原则

重写父类方法与子类方法之间需要注意

  1. ==:方法签名必须相容

  2. <=:返回值类型 :基本数据类型 必须相等, 引用数据类型
    子类小于等于父类

  3. >=:权限修饰符 :子类的权限修饰符>=父类的权限修饰符

  1. 以下修饰符修饰的方法不能被重写:

    a. 被private修饰的方法不能被重写 没有办法被继承

    b. 被final修饰的方法不能被重写

    c. 被static修饰的方法不能被重写
    效果一样,但不是继承了父类,是两个不同的方法

注意:子父类中如果有同名方法,如果父类中的方法一旦被static修饰,子类中的同名方法也要被static修饰

  1. final 最终的,关键字

    a. 被final修饰的变量为常量

    b. 被final修饰的方法不能被重写

    c. 被final修饰的类不能被继承

Super

super和this的区别(常见的面试题|笔试题)

this:->指代当前对象

  1. this(形参列表)调用本类其他构造器

  2. 在构造器的首行

  3. This调用成员变量|成员方法

  4. 区分同名变量:成员变量和局部(参数|局部变量)
    ,this中存放的是当前调用成员方法的对象的地址

super:->指代当前父类的对象

super(形参列表)构造器调用父类构造器

  1. 在构造器的时候使用

  2. 如果不写,隐式调用父类的空构造

  3. 如果子类中有显示调用父类构造器的时候,那么就不会在隐式调用空构造了

super的作用

  1. super调用父类的成员,在子类中使用

  2. 区分子父类中同名的方法,如果没有同名问题,调用父类中的成员默认省略了super

  3. 区分子父类中同名的变量:如果存在同名成员变量,默认调用的是子类中的,默认隐藏来了this,如果想调用父类中的成员变量,需要使用super.:

父类的成员方法:

父类的成员变量:

注意

This和super不能同时存在

创建子类实例:先创建父类后子类.

Object

Object类

是java中所有类的父类|根基类 老祖宗

toString( )

  1. 打印一个对象的引用的时候,默认调用toString()方法!在这里插入图片描述

  2. 重写toString()方法自定义打印对象时的规则:一般为对象的基本信息|成员属性的值

!在这里插入图片描述
equals( )和==的区别


  1. ==:比较的是对象的地址

  2. equals:比较的是对象的内容,需要重写,默认调用Object类中的方法比较地址

在这里插入图片描述

equals的改写

源码在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
多态
====

多态定义

一种事物的多种形态 | 多种表现形式,多态的前提:需要有继承关系

多态的最终体现: 父类的引用指向子类的对象 父类类型 变量=new 子类类型(
);

多态的目的:
使用父类调用子父类中重名的方法的时候回调用子类中重写的方法,如果子类中没有调用父类的,子类中的新增方法对父类不可见

多态的三步

  1. 继承

  2. 父类引用指向子类对象

  3. 调用子父类同名方法,会调用子类中重写的方法

多态使用成员变量

编译的时候看父类,如果父类中有,编译成功,如果父类中没有,编译失败

运行的时候看父类

编译运行看父类|类型|左边:

多态使用成员方法

编译的时候看左边|类型|父类

运行的试试看对象|右边

编译看左边运行看右边,编译看类型,运行找对象

自我总结

发生多态的子父类,生成的对象的成员变量都是以父类为标准,方法使用的是子类里重写后的父类方法.

转型cast(引用数据类型之间的类型转换->继承 | 强转)

向下转型存在错误风险

基本数据类型的强制类型准换->引用数据类型的向下转型

ClassCastException 转型错误异常

instanceof 运算符 预防发生类型准换异常

instanceof 运算符

引用|对象 instanceof 类型

编译:的时候只看前后两个的类型是否在一条继承链上,如果在编译就不报错

运行:判断前面的引用是否是后面类型的对象|实例|引用,如果是返回true,如果不是返回false

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Super_XiongDa/article/details/90143001