面向对象(八)super关键字与final关键字

1.super关键字

当子类重写父类的方法后,子类对象将无法访问父类被重写的方法,为了解决这个问题,Java提供了super关键字,super关键字可以在子类中调用父类的普通属性、方法以及构造方法。

(1)使用super关键字访问父类的成员变量和成员方法,具体格式如下:

super.成员变量

super.成员方法(参数1,参数2…)

public class Animal {
    String name="牧羊犬";
    //定义动物叫的方法
    void  shout(){
        System.out.println("动物发出叫声");
    }
}
public class Dog extends  Animal{
    public  void shout(){
        super.shout();
        System.out.println("汪汪汪。。。。");
    }
    public  void  printName(){
        System.out.println("名字"+super.name);
    }
}
public class Example05 {
    public static void main(String[] args) {
        Dog dog=new Dog();
        dog.shout();
        dog.printName();
    }
}

在Dog类的shout()方法中使用“super.shout()”调用了父类被重写的shout()方法。在printName()方法中使用“super.name”访问父类的成员变量name。从运行结果中可以看出,子类通过super关键字可以成功地访问父类成员变量和成员方法

 

(2)使用super关键字访问父类中指定的构造方法,具体格式如下:

super(参数1,参数2…)


public class Animal {
    private String name;
    private int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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;
    }
    public  String info(){
        return "名称"+this.getName()+"年龄;"+this.getAge();
    }
}
public class Dog extends Animal {

    private String color;

    public Dog(String name, int age, String color) {
        super(name, age);
        this.color = color;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
    //
    public String info(){
        return super.info()+"颜色:"+this.getColor();//扩充父类中的方法
    }
}
public class Example06 {
    public static void main(String[] args) {
        Dog dog=new Dog("牧羊犬",3,"黑色");
        System.out.println(dog.info());
    }
}

上述代码中,使用super()调用了父类中有两个参数的构造方法

注意:通过super()调用父类构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次。

super与this的区别

区别点

this

super

属性访问

访问本类中的属性,如果本类中没有该属性,则从父类中查找。

访问父类中的属性

方法

访问本类中的方法,如果本类中没有该方法,则从父类中继续查找

直接访问父类中的方法

调用构造

调用本类构造,必须放在构造方法的首行

调用父类构造,必须放在子类构造方法的首行

注意:this和super两者不可以同时出现,因为this和super在调用构造方法时都要求必须放在构造方法的首行。

2.final关键字

final的英文意思是“最终”。在Java中,可以使用final关键字声明类、属性、方法,在声明时需要注意以下几点:

(1)使用final修饰的类不能有子类。

(2)使用final修饰的方法不能被子类重写。

(3)使用final修饰的变量(成员变量和局部变量)是常量,常量不可修改

在使用final声明变量时,要求全部的字母大写。如果一个程序中的变量使用public static final声明,则此变量将成为全局变量,如下面代码所示。

public static final String NAME = "哈士奇";

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩气长存在心中

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值