继承
个人理解默认子类会继承父类所有,和访问修饰符无关,访问修饰符限制了子类可以访问的父类对象。
java官方文档,子类不能继承父类private修饰的成员变量和方法,但是可以通过其他公开的方法调用。从侧面来对变量或方法产生影响。
内存结构:
父类对象首先被创建出来,在创建的子类对象,子类对象空间包含直接父类空间,this、super关键字分别被赋值为当前子类对象的和父类对象的地址符,
当使用this和super关键字的时候 ,实际上使用的当前子类对象和父类对象。
每个具有继承关系的子类都有一个直接父类。
从内存结构可以看出实际上子类对象是包含父类对象的,所以说继承是继承了父类对象的所有,但是如果父类对象的相关成员被private修饰的话,只能是父类对象自己访问,其他类是访问不了,但是实际上子类对象还是继承了,只是不能访问。(当然这是个人观点。。。。实际上java官方说的还是有道理的。。。)
this,super关键字
this关键字表示对当前对象的引用;
变量、方法:直接使用this.变量名或this.方法名调用
构造器:在构造器中使用this引用其他构造器的时候一定要是构造器方法体第一句
super关键字表示对当前子类对象的直接父类对象的用;
变量、方法:在子类中直接是使用super.变量名和方法名使用,代表对父类对象变量和方法的引用
构造器:在子类构造器中使用,必须要在构造器第一句,可以不写,编译器会默认加上第一句,用来生成父类对象。
当子类构造器被调用的时候,由于super()调用父类构造器,所以首先进入到父类的构造器中创建父类对象,父类对象创建完毕,再回到子类构造器执行构造器下面的语句创建子类构造器。
访问修饰符的权限
private 权限最小,只能本类使用
dafault 范围 相同包的类
protected 范围相同包的所有类,不同包的子类
public 范围 整个项目都可使用
方法重写和方法重载的区别
方法重写(override):发生在继承当中,子类重写父类方法
要求:返回类型相同,方法名相同,参数列表相同,修饰符的权限不能比子类小
方法重载(overload):发生在同一个类中,
要求:方法名相同,参数列表不同,和修饰符、返回类型无关
Object类
Object类是 所有类的基类,如果创建一个类,没有指定父类,那么他默认继承Object类,
Object方法:getClass()返回当前对象的Class对象,用于反射
hashCode() 返回当前对象的hash码
toString()返回当前对象的类型+@+hash码 字符串,,一般Object的子类会重写toString方法。
equals()使用来表示两个引用类型的数值是否相等。
==和equals()
==:1.比较基本数据类型的数值
2.比较引用数据类型的地址符
equals():比较引用数据类型的数值