面向对象一

继承

  个人理解默认子类会继承父类所有,和访问修饰符无关,访问修饰符限制了子类可以访问的父类对象。

  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():比较引用数据类型的数值

原文地址:https://www.cnblogs.com/pcyiren/p/8952205.html