JavaNote-继承特别篇

本文详细解析了Java中属性的概念及其实现方式,并通过具体代码示例介绍了继承机制中的super关键字使用方法。
class Life{   
  public static void main(String[] args){
      int alive;
          while(alive)
          {
              eat();  
              sleep();
              code();
              repeat();
      }
    }
}

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

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

一.什么是属性?

有兴趣的同学可以百度一下,有的答案是属性,就是字段,也就是上面的private String a。
这里写图片描述

事实上大家都知道不是。

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

//此时的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 到底是什么呢?

这里写图片描述

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

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

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

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

这里写图片描述

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

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

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

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值