10.abstract、final、static三大关键字的使用
一、abstract 抽象
1.Java 中为什么会出现抽象类这个概念呢?
假设我有一个父类:
1 package abs; 2 //父类 3 public class Animal { 4 String name; 5 int age; 6 //动物会叫 7 //方法体有用吗 8 public void shout() { 9 System.out.println("不知道怎么叫"); //我们不知道它怎么叫 10 } 11 }
假如我下面有一个猫类和狗类继承了这个动物类:
1 package abs; 2 //猫继承了动物类 3 public class Cat extends Animal { 4 //重写了父类的方法 5 @Override 6 public void shout() { 7 System.out.println("喵!喵!"); 8 } 9 } 10 11 12 //狗继承了动物类 13 public class Dog extends Animal { 14 15 @Override 16 public void shout() { 17 // TODO Auto-generated method stub 18 System.out.println("汪!汪!"); 19 } 20 21 }
总结:然后你会发现,猫和狗类虽然继承并重写了父类方法,但是父类方法的方法体一点用都没有!!!那能不能把父类的方法体给去掉呢?是可以的,抽象就是用来解决这个问题的!!
当父类的方法不能够确定时,可以用abstract关键字修饰该方法,被abstarct修饰的方法是抽象方法,被abstract修饰的类叫抽象类。
所以上面的程序可以改为:
package abs; //父类 public abstract class Animal { String name; int age; //没有方法体的方法 并且用abstract修饰,抽象方法 public abstract void shout(); } package abs; //猫继承了动物类 public class Cat extends Animal { //重写了父类的方法 @Override public void shout() { System.out.println("喵!喵!"); } } package abs; //狗继承了动物类 public class Dog extends Animal { @Override public void shout() { // TODO Auto-generated method stub System.out.println("汪!汪!"); } }
2. 抽象类概述
在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类
3.抽象类的特点
抽象类和抽象方法必须使用abstract关键字进行修饰
abstract修饰类
- abstract修饰类,此类不能new对象,可声明为引用,更自然的使用多态
- 可以被子类继承,提供共性的属性和方法
- 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
- 抽象类不能实例化创建对象,那有没有构造方法呢?
- 不能直接通过new有方式创建对象,但是可以通过多态的方式实例化
- 构造方法的作用用于子类访问父类数据的初始化
abstract修饰方法
- 被abstract修饰的方法,称为抽象方法,只有方法声明,没有方法实现( 没有{} )
- 必须包含在抽象类中
- 产生继承关系后,子类必须重写父类中所有的抽象方法,否则子类也是抽象类
二、final
final关键字是最终的意思,可以修饰成员方法,成员变量,类
final修饰的特点
- 修饰方法:表示该方法是最终方法,不能被重写
- 但是可以被继承
- 修饰变量:表明该变量是常量,不能再次被赋值
- 实例常量:实例常量不再提供默认值,必须手动赋予初始值
- 赋值时机:显式初始化、构造方法
- 注意如果在构造方法中为实例常量赋值,必须保证所有的构造方法都能正确赋值
- 赋值时机:显式初始化、构造方法
- 静态常量 :静态常量不再提供默认值,必须手动赋予初始值
- 赋值时机:显式初始化、静态代码块
- 实例常量:实例常量不再提供默认值,必须手动赋予初始值
- 修饰类:表明该类是最终类,不能被继承
- String、Math、System均为final修饰的类,不能被继承
三、static
static 关键字是静态的意思,可以修饰成员方法,成员变量
static 修饰的特点
1.被类的所有对象共享,
这也是判断使用静态关键 字的条件
2.可以通过类名调用,也可以通过对象名调用
推荐使用类名调用
3.final修饰的变量,可以加static
static 访问特点
- 非静态的成员方法
- 能访问静态的成员变量
- 能访问非静态的成员变量
- 能访问静态的成员方法
- 能访问非静态的成员方法
- 静态的成员方法
- 能访问静态的成员变量
- 能访问静态的成员方法
总结成一句话:静态只能访问静态

浙公网安备 33010602011771号