基础知识-super与继承方法详解

📈阅读下面代码,思考输出结果

package Homework343;

import javax.print.DocFlavor;

public class homework348 {
    public static void main(String[] args) {
       new Demo().test();
       new Demo("Join").test();
    }
 class  Test{
        String name="Rose";
        Test(){
            System.out.println("Test");
        }
        Test(String name){
            this.name=name;
        }
    }
class Demo extends Test{
        String name="jack";
        Demo(){
            super();
            System.out.println("Demo");
        }
        Demo(String s){
            super(s);
        }
        public void test(){
            System.out.println(super.name);
            System.out.println(this.name);
        }
    }
}


📚详解分析:

✏️(1)在主函数里, new Demo().test()没有指向对象,所以为一个匿名对象,new Demo("Join").test()也为一个匿名对象。
✏️(2)在主函数中,创建一个匿名对象,第一步走Demo的无参构造,

Demo(){
super();
System.out.println(“Demo”);
}

首先调用其父类的无参构造,找到Test的无参构造,即输出"Test";
输出完以后,回到Demo的无参构造,输出"Demo";
✏️(3)Demo对象创建完毕,调用test方法,该方法输出super.name,super.name找的是父类的name属性,父类name属性为"Rose",
即输出Rose;this.name是本类的name,即输出jack.
✏️(4) 执行以下语句:
new Demo(“Join”).test();
走的是子类的有参构造器,s在这里就是Join,调用父类的有参构造器,
      Test(String name){//是传进来的Join
        this.name=name;//将Join赋给this.name,将父类的name改为Join
    }
属性没有动态绑定机制,哪里声明就在哪里使用
✏️(5) 调用test方法,super.name,在这里找父类的name,但是父类的name已经被改为Join,所以在此输出为Join;
✏️(6) 指的是本类name,即jack;

⛳️知识点补充

1. 继承的特点

(1)子类只能继承一个父类(单继承),可以多层继承,例如C继承自B,B继承自A,那么C同样可以调用A类的属性或者方法;
(2)子类继承父类的普通属性和方法
(3)子类不能继承父类的构造方法,但是在子类的构造方法第一行隐 式的存在一个super(),用来调用父类的构造方法;
(4)子类无法继承父类中被private修饰的属性或者方法;
(5)子类可以继承父类中的静态方法和静态属性;
(6)父类中必须有无参构造方法,才能被继承,只有有参构造方法无法被继承。

2. super关键字

(1) super.属性——调用父类的属性
(2) super.方法——调用父类的方法
(3)super()——调用父类的构造方法

2.1 super注意事项

(1)super调用父类的构造方法,必须在构造方法的第一个
(2)super 必须只能出现在子类的方法或者构造方法中!
(3)super 和 this 不能同时调用构造方法

2.1 super与this不同
代表的对象不同:
    this :本身调用者这个对象
    super : 代表父类这个对象的应用
前提
    this :没有继承也可以使用
    super :只能在继承的条件下才可以使用
构造方法
    this :本类的构造
    super :父类的构造
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值