权限修饰符
访问对象成员的权限
修饰符 本类 同包类 不同包子类 不同包类
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只可以在同包被访问.
-
属性尽可能私有化 private
-
访问器:访问器:srtter与getter访问器 >private,一般public居多
SetterXxx:存储 与 getterXxx:查看
扫描二维码关注公众号,回复: 6212080 查看本文章
注意
-
以上四个权限修饰符只能用来修饰方法和成员变量
-
修饰类的只能有public和default(省略)
-
在被private修饰的内容不能被继承,只能本类中使用
能够使用protected的两种情况
-
同包类
-
不同包的子类中可以访问,并且需要通过继承关系访问
面向对象的设计原则之一:
开闭原则:对修改关闭,对扩展开放,不对父类源代码进行修改,而是通过子类增加新的功能,因为不知道该父类的方法在什么代码里有被使用
重写
重载 overload 与重写 override的不同
重载 overload: 同一类中 多个方法名字相同,参数列表不同
重写 override:不同的类 需要继承关系 方法签名都相同(方法名(参数))
检查重写方法的方式:
-
重写方法的左侧会有一个向上的三角
-
在重写方法的上面添加一个@Override
方法的重写原理
-
继承父类中原方法的结构,但是可以对方法的实现进行扩展
-
方法一旦存在重写,调用这个方法的时候,子类会对父类的方法进行屏蔽,因为会发生就近原则
重写父类方法与子类方法之间需要注意
-
==:方法签名必须相容
-
<=:返回值类型 :基本数据类型 必须相等, 引用数据类型
子类小于等于父类 -
>=:权限修饰符 :子类的权限修饰符>=父类的权限修饰符
-
以下修饰符修饰的方法不能被重写:
a. 被private修饰的方法不能被重写 没有办法被继承
b. 被final修饰的方法不能被重写
c. 被static修饰的方法不能被重写
效果一样,但不是继承了父类,是两个不同的方法
注意:子父类中如果有同名方法,如果父类中的方法一旦被static修饰,子类中的同名方法也要被static修饰
-
final 最终的,关键字
a. 被final修饰的变量为常量
b. 被final修饰的方法不能被重写
c. 被final修饰的类不能被继承
Super
super和this的区别(常见的面试题|笔试题)
this:->指代当前对象
-
this(形参列表)调用本类其他构造器
-
在构造器的首行
-
This调用成员变量|成员方法
-
区分同名变量:成员变量和局部(参数|局部变量)
,this中存放的是当前调用成员方法的对象的地址
super:->指代当前父类的对象
super(形参列表)构造器调用父类构造器
-
在构造器的时候使用
-
如果不写,隐式调用父类的空构造
-
如果子类中有显示调用父类构造器的时候,那么就不会在隐式调用空构造了
super的作用
-
super调用父类的成员,在子类中使用
-
区分子父类中同名的方法,如果没有同名问题,调用父类中的成员默认省略了super
-
区分子父类中同名的变量:如果存在同名成员变量,默认调用的是子类中的,默认隐藏来了this,如果想调用父类中的成员变量,需要使用super.:
父类的成员方法:
父类的成员变量:
注意
This和super不能同时存在
创建子类实例:先创建父类后子类.
Object
Object类
是java中所有类的父类|根基类 老祖宗
toString( )
-
打印一个对象的引用的时候,默认调用toString()方法!
-
重写toString()方法自定义打印对象时的规则:一般为对象的基本信息|成员属性的值
!
equals( )和==的区别
-
==:比较的是对象的地址
-
equals:比较的是对象的内容,需要重写,默认调用Object类中的方法比较地址
equals的改写
源码
多态
====
多态定义
一种事物的多种形态 | 多种表现形式,多态的前提:需要有继承关系
多态的最终体现: 父类的引用指向子类的对象 父类类型 变量=new 子类类型(
);多态的目的:
使用父类调用子父类中重名的方法的时候回调用子类中重写的方法,如果子类中没有调用父类的,子类中的新增方法对父类不可见
多态的三步
-
继承
-
父类引用指向子类对象
-
调用子父类同名方法,会调用子类中重写的方法
多态使用成员变量
编译的时候看父类,如果父类中有,编译成功,如果父类中没有,编译失败
运行的时候看父类
编译运行看父类|类型|左边:
多态使用成员方法
编译的时候看左边|类型|父类
运行的试试看对象|右边
编译看左边运行看右边,编译看类型,运行找对象
自我总结
发生多态的子父类,生成的对象的成员变量都是以父类为标准,方法使用的是子类里重写后的父类方法.
转型cast(引用数据类型之间的类型转换->继承 | 强转)
向下转型存在错误风险
基本数据类型的强制类型准换->引用数据类型的向下转型
ClassCastException 转型错误异常
instanceof 运算符 预防发生类型准换异常
instanceof 运算符
引用|对象 instanceof 类型
编译:的时候只看前后两个的类型是否在一条继承链上,如果在编译就不报错
运行:判断前面的引用是否是后面类型的对象|实例|引用,如果是返回true,如果不是返回false