static final 常量 :
- 必须申明同时初始化
- 类名点来访问、不能被改变
- 建议:常量名所有字母都大写,多个单词用_分隔(eg STUDENT_NAME)
- 编译器在编译时会将常量直接替换成具体的数,效率高
- 何时用:数据永远不变,并且还经常使用
public class StaticFinalDemo {
public static void main(String[] args) {
System.out.println(Aoo.num);
// 1.加载Aoo.class到方法区
// 2.静态变量num一并存储到方法区
// 3.到方法区中获取num的值并输出
System.out.println(Aoo.COUNT);
// 编译器在编译时会将常量直接替换为具体数值,效率高
}
}
class Aoo{
public static int num = 502; //静态变量
public static final int COUNT = 520;//常量
}
抽象方法:
- 由abstract修饰,只有方法的定义,没有具体的实现(连{}都不需要)
- java规定,包含抽象方法的类 必须时抽象类。
抽象类:
- 由abstract修饰
- 包含抽象方法的类必须是抽象类
- 抽象方法是不完整的,那么抽象类也是不完整的,所以抽象类是不能new来实例化
- 抽象类是需要被继承的,派生类:
1.重写所有抽象方法—-变不完整为完整
2.也声明为抽象类—-一般都不这样使用,因为不能new
- 意义:
封装共有的属性和行为—-代码复用
为所有派生类提供统一类型—-向上造型
可以包含抽象方法,为所有派生类提供统一入口(超类能点出来)
派生类的行为不同,但入口时一致的,同时相当于定义了一个标准(强制重写)
abstract class Boo{ //有抽象方法的类必须是抽象类
int width,height,speed;
abstract void move(); //抽象方法
}
//抽象类不能new来实例化,只能被继承
class Coo extends Boo{
void move(){ //要想子类可以new 必须重写继承父类的抽象类
speed++;
}
}
//那么抽象方法必须继承,而且还有重写,为什么要使用?
// 答 保证当向上造型的时候,超类引用可以点出来那个方法
//按照上面说,我做成普通方法不是更方便?
//答 若设计成普通方法,则派生类可以重写,可以不重写,而设计成抽象类,子类必须重写----做了一个标准,强制必须重写,这样不会遗漏子类要做的事情
类设计规则:
讲共有的属性和行为,抽到超类中
若对象的行为都一样,设计成普通方法
若对象的行为不一样,设计成抽象方法
学习记录,参考:blog.csdn.net/jason13579