天天看点

java基础—关键字之final、static、abstract、interface详解java基础—关键字

java基础—关键字

文章目录

  • java基础—关键字
      • 1.说说final关键字作用
      • 2.说说static关键字
      • 3.final和static的区别
        • 相同
        • 不同
      • 4.final 和 static 修饰成员变量加载过程例子
      • 5.抽象类是什么
      • 6.为什么要有抽象类
      • 7.抽象类如何定义
      • 8.abstract关键字
      • 9.interface关键字
      • 10.abstract和interface区别
        • 相同
        • 不同
      • 11.this和super关键字的作用

1.说说final关键字作用

final语义使最终的、不可改变的,可修饰类、方法、成员变量

  • 修饰类:被final修饰的类不可被继承
  • 修饰方法:被final修饰方法不能被重写
  • 修饰成员变量:被final修饰的成员变量必须赋初始值,赋值后不能再重新赋值。

2.说说static关键字

static可以修饰内部类、方法、成员变量、代码块,表示静态或全局。 一旦使用了static关键字,那么这样的内容不再属于对象,而是属于类的,所以凡是本类的对象,都共享同一份。

  • 修饰内部类:完全属于外部类本身,不属于外部类某一个对象,只可以访问外部类的静态变量和方法
  • 修饰方法:可以通过对象名.方法名或类名.方法名访问,静态方法中不能直接访问非静态(静态加载优先于非静态)
  • 修饰成员变量:变量属于整个类而不属于对象,多个对象会共享这个变量。
  • 静态代码块:代码块在类被第一次加载时执行静态代码块,且只被执行一次,主要作用是实现 static 属性的初始化。

3.final和static的区别

相同

  • 都可以修饰类、方法、成员变量
  • 都不能修饰构造方法

不同

  • static可以修饰代码块,final不可以
  • sttaic不可以修饰方法内的局部变量,dinal可以。
  • static修饰的属性只会被创建一次。修饰的代码块只会被执行一次。
  • static修饰的方法中不能用this和supper(static修饰使类共享,不止属于对象)

4.final 和 static 修饰成员变量加载过程例子

public class TestStaticFinal {
    public static void main(String[] args) {
        StaticFinal sf1 = new StaticFinal();
        StaticFinal sf2 = new StaticFinal();
        System.out.println(sf1.fValue == sf2.fValue);//打印false
        System.out.println(sf1.sValue == sf2.sValue);//打印true
    }
}
class StaticFinal {
    final int fValue = new Random().nextInt();
    static int sValue = new Random().nextInt();
           

5.抽象类是什么

在面向对象的概念中,所有的对象都是通过类来描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

比如:要表示动物园中的动物,其中动物有多种多样孔雀、斑马等,它们是不同的,但是又都属于动物,所以动物就是孔雀、斑马的抽象类。

正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能实例化的。

6.为什么要有抽象类

  • 用于类型隐藏: 我们可以构造一个固定的行为抽象描述,但这种行为描述却可以有任意个具体行为的实现方式,这个抽象描述就是抽象类。例如:动物就是一个抽象描述,动物有多种,可以是孔雀、可以使斑马。
  • 用于扩展对象的行为功能: 一组任意个可能的具体实现则表现为所有可能的派生类(子类),就扩展了此模块的行为功能。例如银行充值功能(银行可以有多家),这个功能是抽象的,可以扩展实现为多家银行充值的功能。

7.抽象类如何定义

抽象类(abstract class)和接口(Interface)在Java语言中都是用来进行抽象类定义的两种主要方法

8.abstract关键字

可以修饰类和方法,表示抽象类和抽象方法,不能修饰属性和构造方法

  • 修饰类:抽象类,需要被继承,是 单继承用的是关键字 extends。不能被实例化
  • 修饰方法:抽象方法,需要子类重写。

9.interface关键字

  • 接口(interface)是抽象方法和常量定义的集合,一个接口可以有多个实现类用implements
  • 接口中的所有成员变量都是 默认 由public sttaic final修饰,不可更改
  • 接口中的所有抽象方法都是 默认 由public acstract修饰
  • 接口中没有构造器
  • 接口采用多继承(实现)

10.abstract和interface区别

相同

  • 都不能被实例化

不同

成员变量:
  • interface:不可有私有的,默认是public static final 型,且必须给其初值,实现类中不能重新定义,不能改变其值。
  • abstract:可有私有的,其值可以在子类中重新定义,也可以重新赋值
方法:
  • interface:不可以私有,默认被public abstrace修饰
  • abstract:可以私有,方法可以不被abstrace修饰,但是必须由方法体。被abstract修饰的方法不能有方法体
实现:
  • interface:一个类可以实现多个interface
  • abstract:一种继承关系,一个类只能使用一次继承关系。可以通过继承多个接口实现多重继承

11.this和super关键字的作用

this

  • 对象内部指代自身的引用
  • 解决成员变量和局部变量同名问题
  • 可以调用成员变量
  • 不能调用局部变量
  • 可以调用成员方法
  • 在普通方法中可以省略 this
  • 在静态方法当中不允许出现 this 关键字

super

  • 代表对当前对象的直接父类对象的引用
  • 可以调用父类的非 private 成员变量和方法
  • super(); 可以调用父类的构造方法,只限构造方法中使用,且必须是第一条语句