2.JAVA OOP(面向对象编程)

  • static关键字的用法

static的意思是“’静态的”,在java里面可用于修饰属性和方法。
static关键字的应用应注意以下几种情形:  
1.static作用于某个字段,一个static字段对每个类来说只有一份存储空间,而非static字段是每个对象有一份存储空间。
2.static作用于方法。不需要创建任何对象直接调用该static方法,这对于main()方法很重要。
3.static不能应用于局部变量。
4.Java中禁止使用全局方法,所以引入static方法通过类本身来直接调用。
5.静态变量:静态变量不依赖于实例,在内存中只有一份拷贝,不管是通过类名还是实例去访问,访问的都是同一个东西。而实例变量是每个实例都会对其有一份拷贝,并且互不影响。
6.静态方法:静态方法不依赖于实例,通过类名就可以直接访问。静态方法中不能访问this,super,普通方法,实例变量等与实例相关的东西。
7.静态代码块:静态代码块是在类加载时就会运行,它的运行的顺序是优于构造方法,一般用来做一些初始化工作。

  • final关键字的用法

final意味着"不可改变的",一般应用于数据、方法和类。
final数据当数据是基本类型时,意味着这是一个永不改变的编译时常量,一个在运行时被初始化的值,你不希望它改变。当数据是引用类型时,用static和final修饰表示这是只占据一块不能改变的内存空间。
final用于声明属性、方法、类。分别表示属性不可变,方法不可覆盖,类不可继承。内部类要访问局部变量必须定义成final类型。

  • super关键字的用法

    表示当前对象的直接父类
    super.属性 访问父类的成员变量
    super.成员方法 访问父类的方法
    super(xxx) 访问父类的构造方法

静态变量、成员变量、局部变量的区别

2.JAVA OOP(面向对象编程)_第1张图片

  • 成员变量和局部变量的区别
    成员变量:
    ①成员变量定义在类中,在整个类中都可以被访问。
    ②成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。
    ③成员变量有默认初始化值。

    局部变量:
    ①局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。
    ②局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。
    ③局部变量没有默认初始化值
    在使用变量时需要遵循的原则为:就近原则。首先在局部范围找,有就使用;接着在成员位置找。

  • 成员变量和静态变量的区别
    数据存储位置不同:
    ①成员变量存储在堆内存的对象中,所以也叫对象的特有数据。
    ②静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

抽象类与接口

  • 抽象类

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

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。

抽象更像一个最基本体系,包含了最基本的东西,子类只需要去继承就能得到最基本的原型

  • 注意点
    1.抽象方法不能是private,final,static的,可以是默认,protected。
    2.抽象类中不一定有抽象方法,但抽象方法一定在抽象类中。
    3.抽象类中可以有非抽象方法,可以有属性。
    4.构造方法,类方法(用static修饰的方法)不能声明为抽象方法。
    5抽象类可以有构造方法,但抽象类不能直接new出来;在new子类对象的过程中会调用抽象父类的构造方法,但抽象父类不会被创建实例,因此构造方法的调用不见得会创建出对象,它只是创建对象过程中必经的一个过程。
    6.抽象类可继承别的类,可被子类继承。
    7.抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
    8.抽象类不能被实例化,编译无法通过。只有抽象类的非抽象子类可以创建对象。
    9.抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。

  • 接口

接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

  • 接口特性

1.接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能public abstract,其他修饰符都会报错)。
2.接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
3.接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

接口更像一个最基本模块/功能或者说需求,类提供支撑点,类需要在这个支撑点上去实现(英文:implement)或者说完善接口具体功能

- 抽象类与接口的区别

2.JAVA OOP(面向对象编程)_第2张图片
PS:
1.在Java中抽象类表示的是一种继承关系,像一个体系,一个类只能继承一个抽象类,而一个类却可以实现多个接口,因为接口像是功能/模块,就像手机,抽象代表手机,接口代表软件,本来没有这个功能,你下载安装了这个软件就有这个功能。
2.一个接口可以继承一个或多个接口,一个抽象类可以实现一个或多个接口,类能实现一个或多个接口。-------(接口自己能多继承)

你可能感兴趣的:(JAVA面向对象)