三大修饰符
abstract关键字:
抽象类,abstract修饰的类,此类不能new对象,但是可以声明引用。主要作用强制使用多态。
Abstract修饰的函数,子类必须重写其方法,否则该子类也是抽象类,换言之抽象方法必须要能被子类重写。
抽象类中不一定有抽象方法,但有抽象方法的一定是抽象类
static关键字:
静态属性:整个类共享内存空间,修改一个全部改变。
静态代码块:static{ }
特点:静态方法允许直接访问静态成员,静态方法不能直接访问非静态成员,静态方法中不允许使用this或是super关键字,静态方法可以继承,不能重写,没有多态。,静态代码块在类加载时被执行,且只执行一次。
例:
final关键字
概念:最后的,不可更改的。
final可修饰的内容:类,方法,变量
final修饰类,此类不能被继承,final修饰的方法不能被重写,final修饰的变量值不能被改写(常量)
final修饰的实例常量赋值位置:显示初始化,动态代码块,构造方法。
静态常量:静态常量不在提供默认值,必须手动赋予初始值。赋值时机:显示初始化,静态代码块。
final 修饰基本类型值不可变,对象不能修改地址。
例:
public class TestFinl {
public static void main(String[] args) {
final Student student = new Student();
// student = new Studdent();
}
}
class Student {
int c = 5;
final int a;
static final int b;
static { // 静态代码块
b = 4;
// b = 5;
}
// 动态代码块
{
a = 3;
// a = 4;
c = 9;
}
public Student() {
System.out.println(a + "\t" + b + "\t" + c);
}
}
接口:
interface关键字
接口相当于特殊的抽象类,定义了方式,组成部分与抽象类类似 interface 类名{ //公开静态常量,公开抽象方法,建议不要使用公开静态常量}
作用:弥补java单继承,扩充子类能力,支持多实现。
实现接口中的抽象方法时,访问修饰符必须是public
注意:仅可调用接口中所声明的方法,不可调用实现类中独有的方法,可强转回现类本身类型进行独有方法的调用。
特点:类与接口多实现,接口与接口多继承,
优点:1.程序的耦合度降低2. 更自然的使用多态3.设计与实现完全分离 4. 更容易搭建程序框架5.更容易更换具体实现
案例:
需求:
/*
* 定义一个 消费者
* 定义一个 电脑城老板
* 定义一个 宠物店老板
* 定义一个 人类
* 定义一个猫
* 定义一个狗
* 定义一个鼠标
* 定义一个键盘
* 定义一个商品
* 消费者有一个购买行为 (这个行为可以支付给电脑城老板或者宠物店老板,并且可以支付一定的金额)
* 然后根据支付金额的不同返回的商品 返回的商品不同
* 需求就是 使用 接口来 实现这个需求的多态
*/