super关键词的使用

super关键词的使用

1.概念

  • super理解为父类的
  • super可以用来调用属性、方法、构造器

2.使用

  • ​ 我们可以在子类的方法或构造器中,通过使用super.属性或者super.方法的方式,显式的调用父类中声明的属性或者方法,但是通常情况下,我们习惯省略super
  • 特殊情况下,当子类和父类中定义了同名的属性时(同名属性不会覆盖),我们要想在子类中调用父类中声明的属性,则必须显式的使用super.属性的方式,表明调用的是父类中声明的属性
  • 特殊情况下,当子类重写了父类中的方法以后,使用super.方法,表明调用的是父类中被重写的方法
  • super 构造器
    • 我们可以在子类的构造器中显式的使用super(形参列表)的方式,调用父类红声明的指定的构造器
    • super(形参列表)的使用,必须声明在子类构造器的首行
    • 我们在类的构造器中针对于this(形参列表)super(形参列表)只能二选一,不能同时出现
    • 在构造器的首行,没有显式的声明this(形参列表)或者super(形参列表)则默认调用的是父类中空参的构造器
    • 在类的多个构造器中,至少有一个类的构造器使用了super(形参列表),调用父类中的构造器

3.code举例

  • 父类

    public class Person {
        String name;
        int age;
        int id = 1001;// 身份证号
    
        public Person() {
    
        }
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public void eat() {
            System.out.println("人吃饭");
        }
    
        public void walk() {
            System.out.println("人走路");
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    
    
  • 子类

    package com.lmwei.p9;
    
    public class Student extends Person{
        String major;
        int id = 1009; //学号 子类和父类出现同名的属性 子父类属性不会覆盖
    
        public Student() {
    
        }
        public Student(String major) {
            // 默认调用super() 构造器
            super("小黑", 19);
            this.major = major;
        }
    
        @Override
        public void eat() {
            System.out.println("学生多吃有营养的食物");
        }
    
        public void study() {
            System.out.println("学生学习");
            // 调用父类中被重写的方法
            super.eat();
        }
    
        // 调父类的属性
        public void show() {
            // this 和 super 都指向Student对象的的属性
            System.out.println("name= " + this.name + " age= " + super.age);
            // 子类属性id
            System.out.println("id= " + id);
            // 父类属性id
            System.out.println("id= " + super.id);
        }
    }
    
  • 测试类

    package com.lmwei.p9;
    
    public class SuperTest {
        public static void main(String[] args) {
    
            Student s = new Student("计算机");
            s.show();
    
            System.out.println("------------------------------------------");
            // 演示使用 super.方法 调用父类的方法
            s.study();
    
        }
    }	
    
    
    
    
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值