Java学习笔记七:基础知识——super关键字/知识杂烩

一、super关键字

1、 super与this的对比

this:

this 能出现在实例方法和构造方法中;
this 的语法是 this.和this();
this 不能使用在静态方法中;
this. 大部分情况下可以省略,在区分局部变量和实例变量时不能省略。
public void setName (String name){
this.name = name;
}
this()只能出现在构造方法的第一行,通过当前构造方法去调用本类中的其他构造方法,目的是实现代码复用。

super:

super 能出现在实例方法和构造方法中;
super 的语法是 super.和super();
super.属性名 // 访问父类的属性
super.方法名(实参) // 访问父类的方法
super(实参) // 调用父类的构造方法

super 不能使用在静态方法中;

super. 大部分情况下可以省略,在以下情况不能省略:
父类和子类中有同名属性,或者说有同样的方法,
想在子类中访问父类的,super. 不能省略。

super()只能出现在构造方法的第一行,通过当前构造方法去调用父类中的
其他构造方法,目的创建子类对象的时候,先初始化父类型特征。

super 不是引用,也不保存内存地址,不指向任何对象。
从内存图来看,super 只代表当前对象内部的一块父类型特征。

输出引用时,会自动调用引用的toString()方法
System.out.println(this.toString);
System.out.println(super); // 报错 需要"."

2、 super()
表示通过子类的构造方法调用父类的构造方法。

当一个构造方法第一行既没有this()又没有super()时,默认会有一个super();表示通过当前子类的构造方法调用父类的无参数构造方法;因此必须保证父类的无参数构造方法是存在的。

父类的构造方法无论如何都会执行。
子类构造方法执行时必然调用父类构造方法。
Object类的无参数构造方法一定会执行。

super(实参)的作用是初始化当前对象的父类型特征。
并不是创建新对象,实际上对象只创建了一次。

3、 this()和super()不能共存,
两者都只能出现在构造方法的第一行。

二、一些知识杂烩

1、 方法覆盖需要和多态机制联合起来使用才有意义。
Anima a = new Cat();
a.move();

目的:编译的时候move()方法是Animal的,
运行的时候自动调用子类Cat重写的move()方法。

假设没有多态机制,方法覆盖存在的意义不大。当父类的方法无法满足子类业务需求时,子类可以定义一个全新的方法。

2、 静态方法不存在方法覆盖。
方法覆盖只是针对于“实例方法”,“静态方法覆盖”没有意义。
静态方法的执行不需要对象,不适用多态机制。

假设eat()是静态方法,
Animal b = new Dog();
b.eat();
// 相当于类.eat();
// 调用Animal的eat方法.

3、 私有方法不能覆盖。

4、 方法覆盖中,方法的返回值类型

什么条件满足之后,会构成方法的覆盖呢?
① 发生具有继承关系的两个类之间。
② 父类中的方法和子类重写之后的方法:
具有相同的方法名、相同的形式参数列表、相同的返回值类型。

学习了多态机制之后:
“相同的返回值类型”可以修改一下吗?
对于返回值类型是基本数据类型来说,必须一致。
对于返回值类型是引用数据类型来说,重写之后返回值类型可以变的更小。
(意义不大,实际开发中没人这样写。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值