Skip to content

Latest commit

 

History

History
80 lines (55 loc) · 3.79 KB

概念区别.md

File metadata and controls

80 lines (55 loc) · 3.79 KB

###关键概念区别

####抽象类与接口

区别 抽象类 接口
关键字 abstract class interface
概念 不能实例化的类,可能包含抽象方法 抽象方法和静态常量的集合
组成 抽象方法、普通方法、静态方法、变量、常量、静态变量、构造方法 抽象方法、静态常量
子类 子类继承抽象类 实现类实现接口
继承或实现关键字 extends implements
局限性 单继承,可以多层继承 没有限制
关系 抽象类可以实现接口 接口不能继承抽象类
应用类 父类强制子类完成某些特定的功能,当然父类中也包含了共同的代码 约定、规范。 方法的描述,子类必须完成所有的方法

####重写与重载

区别 重写 重载
关键词 override overload
概念 子类重写父类的方法 一个方法的多种展现形式
环境 子类和父类 一个类中
方法名 相同 相同
参数列表 相同 必须不同
返回值 相同 没有要求
访问权限 子类不能比父类更加严格 没有要求
异常 子类不能抛出比父类大的异常 没有要求

####this与super 总结:this是当前对象在堆空间的引用地址,super是当前对象的父类特征的引用

super 只是记录对象内部的父类的特征(属性和方法)的一个引用

这儿super不是指向父类对象的引用地址,new出来的才在堆里面分配空间有引用地址,这儿没有去new一个父类对象,只是执行了父类的构造函数将父类的特征生成了,但是属于New出来的那个子类对象的

实践一下,你可以写

public FatherClass getThis() 
{ 
return this; 
} 

编译通过,没有任何问题 但是你写

public FatherClass getSuper() 
{ 
return super; 
} 

嘿嘿,编译出错! 为什么啦?

  • 因为super并不是一个堆空间里面的一个对象的引用地址,而this才是堆空间里面的一个对象的引用地址
  • super只能在对象内部使用,而this可以在对象内部使用也可以返回出对象外.
  • super是死的,编译的时候就定死了super的指向了,而this是活的,在运行时候决定其指向.

解释一下:

子类实例化对象,并没有去实例化他的父类对象,也就是说,那个子类对象里面并没有一个父类对象,那你说没有父类对象,为什么子类构造函数要执行父类的构造函数啦,那是因为需要创建父类的特征赋予子类,但是是由子类所有,而super就是用来区别是是否是父类对象的特征的. 重写父类方法属性,就是再创建了一个子类的特征,当你用this的时候,就覆盖了父类的特征了,但是父类特征还在那儿,用super就能访问到,但是只能在对象的内部使用.对象外面就只能看到覆盖了父类特征的子类特征了.

区别 this super
访问属性 this.属性名。只能访问当前对象所拥有的属性(包括继承来的属性,如果继承的属性名和子类对象相同,若不指定则调用子类的,调用父类的需要显示指定:super.属性名) super.属性名。可以访问父类非私有的属性
访问方法 与访问属性类似 与访问属性类似
调用构造器 this(有参或无参)调用本类中有参或无参的构造函数,必须放在构造函数的第一句 super(有参还是无参)调用父类的有参或是无参的构造方法,必须放在构造方法的第一行(注意:在同一个构造函数里不能同时出现this()和super()
指代 this是当前对象在堆空间的引用地址 super是当前对象的父类特征的引用
作为参数 this可以作为参数,它代表了当前对象的引用 super不可以
使用环境 不可以在static环境中使用 不可以在static环境中使用