fantasticDream

面向对象编程----继承_super_构造器的调用_继承的内存分析(非常重要)

Super 是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性

普通方法:

没有顺序限制,可以随便调用。

构造函数中:

任何类的构造函数中,若是构造函数的第一行代码没有显式的调用super(...);

那么Java默认都会调用super();作为父类的初始化函数。

所以你这里的super();加不加都无所谓。

This指向当前对象的引用(引用就是地址)

 

package cn.bjsxt.oop.inherit;

 

public class Animal /*extends Object */{
String eye;
public void run() {
System.out.println("咳咳咳!");
}
public void eat() {
System.out.println("色块!");
}
public void sleep() {
System.out.println("干饭!");
}

public Animal() {
// 调用父类的构造器,你不加编译器自动给你加一个,
// super()只能位于第一句话Object构造器里面没有,因为Object没有父类构造器
super();
System.out.println("创建一个动物!");
}
}

 

class Mammal extends Animal {
public void taishang() {
System.out.println("洛赛克!");
this.run();
this.eat();
}
}

 

class Paxing{
String eye;
public void run() {
System.out.println("咳咳咳!");
}
public void eat() {
System.out.println("色块!");
}
public void eggSheng() {
System.out.println("了空间!");
}
}

 

class Bird extends Animal{
String eye;
// 重写 子类需要 自己扩展把原先父类的方法重新编译
// 在这里把run()覆盖掉之后实际上还存在可以再继承后的子类的方法中继续用super调用
public void run() {
super.run();
System.out.println("我是我是一只鸟,我会飞!");
}

public void eggSheng() {
System.out.println("了空间!");
}

public Bird() {
// 选中super然后按住ctrl单击会跳到Bird的父类构造器
super();
System.out.println("建一个鸟窝!");
}
}

package cn.bjsxt.oop.inherit;

public class Test {
public static void main(String[] args) {
// bird继承Animal对象再继承Object对象
// 对于这条代码(Bird b = new Bird())是没有的,实际上是有的它只是一个构造器
Bird b = new Bird();
b.run();
b.eat();
b.eggSheng();
}
}

 

posted on 2022-05-27 15:30  神奇的梦  阅读(38)  评论(0)    收藏  举报

导航