第五章 类的继承和多态
5.3 static关键字
通常访问类的属性和方法需要创建该类的实例,而如果一个成员被声明为static,就能够不引用任何对象实现访问。
5.3.1 静态变量
静态变量只需要在变量前年加上static关键字,不需要通过对象来访问,直接使用“类名.变量名”直接访问,并且该变流量不属于哪一对象。
public class VarDemo{
private static int x=1;
public static void main(String[] args) {
VarDemo.x++;
VarDemo v = new VarDemo();
v.x++;
System.out.println("x="+x);
}
}
5.3.2 静态方法
静态访问是在方法前加上static关键字,一旦方法被声明为静态方法,就可以使用“类名.方法名()”来调用,并不需要对象来调用。
public class StaticMethodDemo {
public static void main(String[] args) {
StaticMethodDemo.test();
}
public static void test(){
System.out.println("test...");
}
}
5.3.3 静态代码块
*static代码块也叫静态代码块,可以有多个,并且为之随便放,它不再任何的方法体内。
*static代码块会优先于构造器执行。
*如果static代码块有多个,找他们在类中出现的先后顺序依次执行。
*每个代码块只会被执行一次。
public class StaticBlockDemo {
static {
System.out.println("静态代码块");
}
public StaticBlockDemo(){
System.out.println("构造方法");
}
public static void main(String[] args) {
StaticBlockDemo d = new StaticBlockDemo();
StaticBlockDemo d2 = new StaticBlockDemo();
}
}
5.4 final关键字
final修饰的类不能被继承,修饰的方法不能被重写,修饰的变量代表该变量是常量。
5.4.1 final属性
final修饰属性,代表该属性是常量,并且该属性不能被修改。
public class FinalVarDemo {
private static final int x=5;
public static void main(String[] args) {
x=10;//报错
}
}
5.4.2 final方法
final修饰的方法不能被重写。
重写并不是指子类一定不能定义同名方法,如果父类的方法是私有类型,子类是允许定义该方法的。
class A{
public final void t(){
System.out.println("A t()");
}
private final void r(){
System.out.println("A r()");
}
}
class B extends A{
//编译错误!父类方法为final类型,子类不能重写
public void t(){
System.out.println("B t()");
}
//编译正确!父类方法为private
public void r(){
System.out.println("A r()");
}
}
5.4.3 final类
使用final修饰的类表示该类不能被继承。
final class A{
public final void t(){
System.out.println("A t()");
}
}
class B extends A{
//编译错误!子类不能继承
}
5.5 abstract关键字
抽象类中既有抽象方法,也有具体实现的方法。
抽象类必须由其子类继承,才能实例化对象。
抽象方法只有方法头,没有方法体。
5.5.1 抽象类
定义:abstract class 类名()
5.5.2 抽象方法
抽象方法只声明方法头,没有方法体。
public abstract class Type{
//只有方法头,没有方法体
public abstract double area();
}
*抽象类中除了有抽象方法,还可以有具体的实现方法
public abstract class Type{
//只有方法头,没有方法体
public abstract double area();
public void info(){
System.out.println("我是图形");
}
}
*如果想视同这些方法,必须由抽象类的子类来实现
public class Circle extends Type{
private static final double PI = 3.14;
private int r=5;
@Override
public double area(){
double area = PI*r*r;
return area;
}
//重写抽象类中的info
public void info(){
System.out.println("我是圆形");
}
public static void main(String[] args){
Type type = new Circle();
type.area();
type.info();
}
}
今天把第五章搞完了,明天看看视频,感觉这一章掌握的不是很好,看视频巩固一下,再记一记知识点,然后写完后边的题目。