Java日志第11天 2020.7.16

第五章 类的继承和多态

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();
}
}

 

 

今天把第五章搞完了,明天看看视频,感觉这一章掌握的不是很好,看视频巩固一下,再记一记知识点,然后写完后边的题目。

posted @ 2020-07-16 11:05  Gazikel  阅读(131)  评论(0编辑  收藏  举报