1.static final常量:
1.必须声明同时初始化
2.类名点来访问,不能被改变
3.建议:常量名所有字母都大写,多个单词用-分隔
4.编译器在编译时会将常量直接替换为具体的数,效率高
5.何时用:数据永远不变,并且经常使用
public class StaticFinalDemo {
public static void main(String[] args) {
System.out.println(Aoo.PI); //常常通过类名点来访问
//Aoo.PI = 3.1415926; //编译错误,常量不能被改变
//1)加载Boo.class到方法区中
//2)静态变量num一并存储到方法区中
//3)到方法区中获取num的值并输出
System.out.println(Boo.num);
//编译器在编译时会将常量直接替换为具体的值,效率高
//相当于System.out.println(5);
System.out.println(Boo.COUNT);
}
}
class Boo{
public static int num = 5; //静态变量
public static final int COUNT = 5; //常量
}
class Aoo{
public static final double PI = 3.14159;
//public static final int NUM; //编译错误,常量必须声明同时初始化
}
2.抽象方法:
1.由abstract修饰
2.只有方法的定义,没有具体点的实现(连{}都没有)
3.抽象类:
1.由abstract修饰
2.包含抽象方法的类必须是抽象类
3.抽象类不能被实例化(new对象)
4.抽象类是需要被继承的,派生类:
1.重写所有抽象方法------------------变不完整为完整
2.也声明为抽象类-----------------------一般不这么用
5.抽象类的意义:
1.封装共有的属性和行为----------------代码复用
2.为所有派生类提供统一的类型---------向上造型
3.可以包含抽象方法,为所有派生类提供统一的入口(能点出来),
派生类的行为不同,但入口是一致的,同时相当于定义了一个标准(强制重写)
补充:
1.设计规则:
1.将共有的属性和行为,抽到超类中--------------抽共性
2.若对象的行为都一样,设计为普通方法
若对象的行为不一样,设计为抽象方法
3.面向对象
2.抽象方法/抽象类的疑问:
1.抽象方法的意义是什么?
1.保证当发生向上造型时,通过超类的引用能点出来那个方法
2.既然意义只在于能点出来,那为什么不设计为普通方法呢?
1.若设计为普通方法,则派生类可以重写也可以不重写,而设计为抽象方法,可以 强制派生类必须重写
-----------------做了个标准,强制必须重写