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 访问特点

  • 非静态的成员方法
    •   能访问静态的成员变量
    •   能访问非静态的成员变量
    •   能访问静态的成员方法
    •   能访问非静态的成员方法
  • 静态的成员方法
    •   能访问静态的成员变量
    •   能访问静态的成员方法

 总结成一句话:静态只能访问静态

posted @ 2020-10-13 20:18  单sir  阅读(246)  评论(0)    收藏  举报