final关键字的使用与抽象类

final关键字的使用

final修饰类

表示该类不能够被重写

public class Person
{
    String name;
    int age = 1;
    boolean isMale;
    public void eat()
    {
        System.out.println("人可以吃饭");
    }
    public void sleep()
    {
        System.out.println("人可以睡觉");
    }
    public void talk(String language)
    {
        System.out.println("人可以说话,使用的是:"+language);
    }

};
class Chinese extends Person{
    private String nation;

    public void setNation(String nation) {
        this.nation = nation;
    }

    public String getNation() {
        return nation;
    }

    public void sleep()
    {
        System.out.println("中国人会睡觉");
    }

    public void eat()
    {
        System.out.println("中国人会睡觉");
    }

    public void talk(String language)
    {
        System.out.println("中国人可以说话,说的是"+ language);
    }


}

此时如图所示的两个类都是可以被继承的,但是如果此时在Chinese的父类Person前加上final

会报“Cannot inherit from final 'Person'”,即为无法从final类Person中继承

final修饰方法

final修饰过的方法是无法重写的

在以上两个类中,将Person类中的eat()方法的前面加上final

在Chinese类的eat()方法弹出“'eat()' cannot override 'eat()' in 'Person'; overridden method is final”即为eat()方法不能从Person类中重写,重写的方法是最终方法

final修饰属性或常量

final修饰的属性或者常量不能再次更改

例如以下操作就是错误的

public class Person
{
    final int age=18;
    age=20;
};

如图上的操作就会报出“Unknown class: 'age'”即为对age不被允许的操作

被final修饰过的变量或者属性意味着该变量和属性只能赋值一次,被赋值之后就不能再修改。

注:关于static final修饰的变量或者属性为全局常量,先于类加载,并且可以在全局使用但不可修改

抽象类

1、此类不能实例化

2、抽象类中仍然有构造器,虽然其本身并不实例化,但是当有子类继承该抽象类的时候,仍需要被调用

3、会提供抽象类子类,使之实例化,若子类没有重写父类的方法,则子类也是抽象类(重写抽象类的方法可以不是抽象方法)

注:抽象类的作用就是模型化一部分父类无法实现的功能,需要子类重写完成)

抽象类的实现就关系到abstract关键字的使用

abstract

1、不能修饰属性和构造器

2、不能用来修饰私有方法(private方法不能够被重写)、静态方法

3、final和abstract也没有办法一起使用

abstract public class AbstractCalss {
    private int age;
    private String name;
    abstract int getAge();
    abstract String getName();
    abstract void setName(int name);
    abstract void setAge();
}

如上则是标准的抽象类,被abstract修饰的方法是不能够有方法体的

注:当有子类出现继承抽象类的时候,一定要将继承类中的所有方法全部重写,否则没有办法完成继承,此时我们创建一个类去继承AbstractClass类,当我们没有对其中的任何一个方法进行重写的时候,会出现“Class 'AbstractSon' must either be declared abstract or implement abstract method 'getAge()' in 'AbstractCalss'”即为AbstractSon类必须声明抽象方法或者施行AbstractCalss类中的抽象方法getAge()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值