JavaNote-继承特别篇

class Life{   
  public static void main(String[] args){
      int alive;
          while(alive)
          {
              eat();  
              sleep();
              code();
              repeat();
      }
    }
}

老人说,这不丢脸,也无损真正的骄傲.

首先,在这里作一个小小的声明,此篇博客只是写给那些小白(我自己也是小白)我遇到过的一个问题,大佬们如果发现了问题,请点点你的小手指纠正一下错误,谢谢~

一.什么是属性?

有兴趣的同学可以百度一下,有的答案是属性,就是字段,也就是上面的private String a。
JavaNote-继承特别篇_第1张图片

事实上大家都知道不是。

那么属性是什么呢?用简单的话来说就是可读、可写。

//此时的a才能被称为属性,而不是百度说的那样。
public String getA() { //  获取属性a(可读)
        return a;
    }
public void setA(String a) {   //设置属性a(可写)
    this.a = a;
}

二.继承中的小问题

一言不合上代码

class AAA{
    private String a;    // 成员变量
    private String b;
    public String getA() { //  获取属性a
        return a;
    }
    public void setA(String a) {   
        this.a = a;
    }
}

class BBB extends AAA{
    public String getSuperA(){
        return super.getA();
    }
}

public class ExtendsDemo {
    public static void main(String[] args) {
        AAA a = new AAA();
        BBB b = new BBB();

        b.setA("b-a");

        System.out.println(b.getA()); // b-a 

        System.out.println(a.getA()); // null
        System.out.println(b.getSuperA()); // b-a
    }
}

很简单的一段代码,一个BBB类继承了AAA类,BBB类有一个getSuperA的方法(伏笔),b.getA(),a.getA()的运行结果,相信大家都能够知道。

问题在于 b.getSuperA() ,BBB类中的super.getA()到底是什么?

其实解决这个问题只需要解决BBB类中的super到底是怎么回事。

想知道super到底是什么,看以下代码:

class AAA{
    private String a;    // 成员变量
    public String getA() { //  获取属性a
        return a;
    }
    public void setA(String a) {   
        this.a = a;
    }
}

class BBB extends AAA{
    public String getSuperA(){
        return super.getA();
    }

    public void getThis(){
        System.out.println(this.toString());
    }

    public void getSuper(){
        System.out.println(super.toString());
    }
}
public class ExtendsDemo {
    public static void main(String[] args) {
        AAA a = new AAA();
        BBB b = new BBB();

        b.setA("b-a");
        System.out.println(b.getA()); // b-a 

        System.out.println(a.getA()); // null

        System.out.println(b.getSuperA()); // b-a

        b.getHash();    // this
        b.getSuperHash(); // super
    }

}

那么BBB类中的this,super 到底是什么呢?

JavaNote-继承特别篇_第2张图片

也不知道有没有同学感到惊讶,我之前一直以为BBB类的super就是AAA类,其实不然,BBB类的super就是BBB类,它只不过通过父类的构造器继承了一些方法,所以b.getSuperA()结果也就是b-a了。

接下来的这些话是个人的理解,大家看看就好,如果有错,希望能够被指出。

我们假想一下,B继承了A,new 出来的B的内存空间里面有一块区域装的是通过super()接收下来的一些方法或者其他,调用super.A 其实是在操作B内存里面的数据,和父类A没有任何关系,从来没有new一个super(A)区域

与一位美丽的程序媛的聊天记录

JavaNote-继承特别篇_第3张图片

真的,现在在一些论坛或者交流平台请教问题,很难,很被人瞧不起。请教一个问题,大佬们都是反问句。像这位我把她贴出来真的是源于感动,可能大家都不知道她是谁,可是谁在乎呢,她能代表的就是情怀。她也给我好好的上了一课,比如:Java里面是否有指针?我说的是有。她说,回答有,没错。回答没有,不全对,因为Java里面管指针叫做引用,就和管函数为方法一样,其实是一个道理,叫法不一样。以后如果别人问我这个问题,我会作以下回答:“没有,可 Java里面有引用,和指针一样。”最后说一句,希望大家不管技术的高低,都能够 “不忘初心,心怀敬畏之心,着眼于语言以外的地方。”

CNcots CN Caprice of the stone的简写, 译为石头的随想曲.

博客中有网上摘抄的资料. 有个人的一些小心得 ,有什么不对的地方, 还请各位观客老爷们指出.

JavaNote系列博客, 纯属个人学习时间段整理的一些笔记, 会坚持每周至少一更,多多关照.

你可能感兴趣的:(JavaNote)