java final abstract_Java修饰符static,final,abstract

一、static

什么是static修饰符?

修饰属性,

修饰方法,

修饰初始化代码块,

修饰内部类;

静态属性:

(1) static修饰的属性为静态属性

(2) 全类共有的属性,是该类所有对象共有的。所以也叫类变量

(3) 静态属性(类变量)不是实例对象中的数据,它与类相关,可以直接使用类名访问

(4)在类加载时就申请空间并初始化,而且静态属性是存储在jvm的静态池里

(5) 可在任意的方法中使用,可称为全局变量

静态方法:

(1) static修饰的方法为静态方法

(2) 可以用类名直接调用,无需使用对象来访问,而非static的方法只能使用对象调用

(3)只能直接访问类的静态成员,不能直接访问非静态成员

(4) static方法中不允许出现this,super关键字

(5) static方法子类可以继承,而且子类可以覆盖静态方法,

但只能用子类的静态方法去覆盖,不能用子类的非静态方法去覆盖,

静态方法覆盖后不能实现多态。

(6) 只会在类加载时创建一次,不会反复创建。

修饰符写法:public static int age;

private static int method() { … }

二、final

什么是final修饰符?

类似于c++中的const,代表不可改变,所有被final修饰的则都不可改变。

修饰属性;

修饰方法;

修饰类;

修饰局部变量;

final修饰属性:

(1)必须且只能赋一次值才能使用,赋了值后则不能改变

(2) 可以在声明时就赋值,也可以在构造方法中赋值

(3) 不一定是常量,final只是不可二次赋值,但不一定是常量

(4) final修饰的对象引用,只能固定地指向某个对象,但对象中的内容可变

(5)常量要使用static final同时修饰。如:static final int a=10;

static final属性:

(1) 在定义属性时初始化,如 static final int a=10;

(2) 在构造方法中不能给static final属性赋值初始化。

(3) final修饰的变量会浪费空间,在实际开发中使用很少。一般都用static final修饰。

(4) 修饰符写法:public static final int age = 10;

final修饰方法:

(1) 可以被子类继承,但不能覆盖。

(2) 非final方法的覆盖会受到修饰符的影响,子类的修饰符要比父类的宽才能覆盖。

final修饰类:

(1) final修饰的类叫不变类,不能被继承,它没有子类。

(2) 一个final类中的所有方法都是final的方法。

(3)String类就是一个典型的final类。

举例说明不变类:

final class C {

private final int a;

private final int b;

public C(int a,int b) { this.a=a; this.b=b; }

}

三、abstract

什么是abstract修饰符?

abstract是修饰符,代表抽象。

修饰类;

修饰方法;

abstract修饰类:

(1) 抽象类是用来被继承,子类去实现的。

(2) abstract与多态密不可分的。

(3) 抽象类不能创建对象,但可以声明一个引用。

(4) 抽象类可以调用静态方法,不能调用非静态方法。

(5)一个类中有抽象方法,则这个类必须是抽象类。但抽象类中不一定要有抽象方法。

(6) 一个抽象类可以被子类继承,子类也可以是抽象类。

(7) 子类Sub并不是一个抽象类,可以创建对象。public abstract class Shapes { //抽象类

public int x, y;

public int width, height;

public Shapes(int x, int y, int width, int height) {

this.x = x; this.y = y;

this.width = width; this.height = height;

}

abstract double getArea(); //抽象方法

abstract double getPerimeter(); //抽象方法

}

public class Circle extends Shapes { //子类

public double r;

public Circle(int x, int y, int width, int heigh) {

super(x, y, width, heigh);

r = (double) width / 2.0;

}

public double getArea() { //实现父类的抽象方法

return (r * r * Math.PI);

}

public double getPerimeter() { //实现父类的抽象方法

return (2 * Math.PI * r);

}

}

abstract修饰方法:

(1) 抽象方法只有声明,没有实现,用 ";" 结束。abstract void method();

(2) 非abstract子类继承有abstract方法的父类,则一定要实现继承下来的abstract方法

(3) abstract子类继承有abstract方法的父类,则可以不实现继承下来的abstract方法

abstract类与abstract方法的应用:

(1) 主要用来抽象出一些子类的共性,在抽象类中只声明方法,表示出方法能做什么。

(2) 但因不同子类可能方法的实现不一样,所以方法实现就是个性。

四、三个修饰符的共同特性和使用

共同特点:

(1) 三个修饰符都可以修饰方法

(2) 三个修饰符都不能修饰构造方法

三个修饰符组合使用规范:

(1)static不能与abstract合用

abstract方法是为了子类覆盖该方法而实现多态。

但static方法是找引用类型的方法,没有多态。

(2)final不能与abstract合用

abstract修饰的类,方法是能继承的,能覆盖的。

但final修饰的类是不能被继承的,final修饰的方法不能被覆盖。

(3)private不能与abstract合用

private方法是不能被继承的,当然就不能覆盖。

而abstract是要求子类继承并覆盖。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值