abstract (抽象)
- 修饰类:为抽象类,被abstract修饰后将无法实例化对象,只能被继承使用。
- 修饰方法:为抽象方法,抽象方法没有方法体,子类在继承抽象方法时,必须重写所有抽象方法
// 抽象类,只可以继承使用
public abstract class Animal {
// 抽象方法,没有方法体,小括号后面直接分号结束
public abstract void eat();
public abstract void sleep();
}
public class Cat extends Animal {
// 继承抽象类需要重写抽象类中的所有抽象方法
@Override
public void eat() {
System.out.println("猫吃鱼");
}
@Override
public void sleep() {
System.out.println("猫睡觉");
}
}
static (静态的)
- 可修饰:属性,方法,初始化代码块以及内部类。被static修饰后称为静态属性,静态方法和静态代码块。
- 静态属性特点:静态属性是所有对象共享的属性,不用创建对象,可通过类名.属性名直接访问。
- 静态方法特点:
可以使用类名.方法名直接调用;
静态方法与对象无关,不能使用this和super关键字;
静态方法中自能访问静态的属性和静态的方法; - 静态代码块的特点:会在类加载时执行,可以在静态代码块中初始化静态属性。
public class PhoneStatic {
// 静态属性:
public static String book;
// 静态代码块初始化:
static {
book = "《程序员的自我修养》";
}
// 修饰方法:
public static void call(String name) {
System.out.println("给" + name + "打电话!");
}
public static void playGame() {
System.out.println("玩游戏");
}
}
public class DemoStatic {
public static void main(String[] args) {
// static关键字的用法
// 1.修饰属性 2.修饰方法 3.修饰代码块
// 通过类名.属性,方法名调用
System.out.println("努力学习" + PhoneStatic.book);
PhoneStatic.call("刘大仙");
PhoneStatic.playGame();
// 运行结果:
// 努力学习《程序员的自我修养》
// 给刘大仙打电话!
// 玩游戏
}
}
final (最终的)
1.可修饰:属性,局部变量,方法,类。被final修饰后分别称为常量属性,常量,最终方法,最终类。
2.常量的特点:只能被赋值一次且终身不能被修改(重新赋值)。
3.常量属性的特点:只能赋值一次,没有默认值,必须手动赋值。
4.最终方法的特点:最终方法不能被子类所覆盖。
5.最终类有什么特点:最终类不能被继承。
public class EunuchFather {
// final方法
public final void pee() {
System.out.println("宦官他爹嘘嘘");
}
public final void marry() {
System.out.println("宦官他爹结婚");
}
}
// final修饰类,无法派生子类,但是可以继承父类
public final class Eunuch extends EunuchFather {
// final修饰属性,为常量,在使用前就应该为其初始化
public final int a = 180;
public final String name = "赵高";
// final修饰方法,方法不能被重写
// public final void pee() {
// System.out.println("宦官嘘嘘");
// }
//
// public final void marry() {
// System.out.println("宦官结婚");
// }
public void pee2() {
System.out.println(name + "嘘嘘");
}
public void marry2() {
System.out.println(name + "“结婚”");
}
}
public class DemoFinal {
public static void main(String[] args) {
// final:最终的
// 可用于修饰类,属性,方法
Eunuch eunuch = new Eunuch();
System.out.println("身高:" + eunuch.a + "cm");
System.out.println("姓名:" + eunuch.name);
eunuch.pee2();
eunuch.marry2();
// 执行结果:
// 身高:180cm
// 姓名:赵高
// 赵高嘘嘘
// 赵高“结婚”
}
}