this和面向对象的三大特征之一:继承以及super

this关键字:
当前对象的正在创建的对象

可以用来修饰:属性、方法、构造器
意义:
为了解决属性名和形参名相同而产生的冲突又称为二义性

this.属性、this.方法调用:
调用的是当前对象中的行为和特征

this调用构造器:

①我们在类的构造器中,可以显示的使用 this(形参列表) 的方法 去调用本类的其他构造器
②不可以调用自己
③规定 this(形参列表) 必须声明在当前构造器的首行
④构造器内部,最多只能声明一个 this(形参列表),来调用其他的构造器

如果不调用,直接写this:那就是指当前类

继承(extends):
声明:

public class A extends B {}
A是子类
B是父类

这样子类B就获取到了父类A中所有属性和方法
(为什么说所有,把private修饰的也包括进去,因为它的确是继承了所有,只是不能访问private修饰的)

继承的作用:

1.减少了代码冗余,提高了代码的复用性
2.更有利于功能的扩展,因为子类只需要继承父类,那么符合的就不修改,不够用的就再扩展
3.提供了多态的前提,因为类和类之间产生了联系

继承中的一些问题:

1.子类不能直接的去访问私有的(成员变量)属性和方法
所以类中一般会提供属性的getter和setter方法(JavaBean规范)
2.类只允许单继承和多层继承,不支持多继承
3.当类没有显示定义继承于哪个类时,默认会继承Object类。所以Object类是所有类的直接父类或间接父类

super关键字:
父类的…
它可以修饰:属性、方法、构造器

引用:

当父类的方法被子类重写了那么我们还想调用父类的方法
这个时候就需要用super来区分调用的是子类还是父类的方法

super.属性:调用父类的属性
super.方法(参数列表):调用父类的方法

super.构造器():

①子类中有参、无参构造器都可以显示调用父类中声明的任何一个构造器(如果没有显示定义,那么会默认调用父类的无参构造器方法)
②要声明再方法中首行,所以出现了与this调用构造器的冲突,因此需要二选一

子类对象实例化全过程:
1.结果上来看:

子类继承父类以后,就获取了父类中声明的属性和方法
创建子类的对象,在堆空间中,就会加载所有父类中声明的属性

2.过程上来看:

当我们通过子类的构造器创建子类对象时,我们一定会直接或间接调用其父类的构造器,
进而调用父类的父类的构造器,直到调用了java.lang.Object类中的空参构造器为止
正因为加载过所有的父类的结构,所以才可以看到内存中有父类中的结构,子类对象才可以考虑调用

3.需明确:虽然创建子类对象时,调用了父类的构造器,但是自始至终就创建过一个对象,即是new的子类对象

你可能感兴趣的:(javase,java)