6.20作业:static,final,继承和方法覆盖

来源:互联网 发布:php页游源码 编辑:程序博客网 时间:2024/05/21 10:57

,(1)static基本概念

static被称为静态,可以用来修饰类的属性或者方法。

如果类的某个属性,不管创建多少个对象,属性的存储空间只有唯一的一个,那么这个属性就应该用static修饰,被static修饰的属性被称为静态属性。

static属性可以使用对象调用,也可以直接用类名调用。

(2)static属性

静态属性是类的所有对象共享的,即不管创建了多少个对象,静态属性在内存中只有一个。

,高级类特性修饰符

可以通过以下修饰符实现类的一些高级特性

static:修饰属性、方法、块、内部类

final:修饰类、常量属性、方法、局部常量abstract:修饰类、方法

synchronized:修饰方法、同步代码块

,static

(1)如果某个方法不需要与某个特定的对象绑定,那么该方法可以使用static修饰,被static修饰的方法称为静态方法。

static方法可以使用对象调用,也可以直接用类名调用,建议用类名直接调用

何时使用static方法

(2)如果某个方法与实例无关,也就是说不管哪个对象调用这个方法,都执行相同的操作,与对象没有关系,则应该定义为静态方法。不需要创建对象后再使用该方法。

例如:API中的Math类,都是静态方法,因为进行数学运算时,与Math对象本身无关,使用类直接调用即可。

static总结

(3)任何方法都可以直接调用静态方法

静态方法不能直接调用非静态方法,需要创建对象,用对象名调用非静态方法

(4)static块和static的属性以及方法的性质是相同的,用static修饰的代码块表示静态代码块,当Java虚拟机加载类时,就会执行该代码块。

(5)区别在于语法不同

静态块只有在类加载的时候被执行一次,不管创建多少个对象,都不会再执行。

如果一个类加载的时候,总要预先做一些事情,则可以放在静态块中,例如,读取一个属性文件,进行一些常规配置,写一些日志等。

一个类中可以有多个静态块,按照顺序执行。 

,final

(1)属性:定义就必须直接赋值或者在构造方法中进行赋值,并且后期都不能修改。

方法:定义必须有实现代码,并且子类里不可被覆盖。

:不能被定义为抽象类或是接口,不可被继承。

(2)final修饰属性

final修饰属性时,基本数据类型的属性将成为常量,不能被修改

一些数学定理中的常量经常使用final修饰

π= 3.14159265358979

E= 2.718281828459045

对参数做final修饰

在方法参数前面加final关键字,为了防止数据在方法体中被修改。

(3)按作用域区分

在类中声明的变量或常量叫属性,或者叫成员变量,如namesalarycount

在方法中声明的变量叫局部变量,或者临时变量。

属性可以使用四种权限修饰符修饰,局部变量不可以

属性可以使用static修饰,局部变量不可以

属性可以使用final修饰,局部变量也可以

 

属性的生命周期很长,随着类加载或者创建对象被初始化,直到没有对象引用才回收

局部变量生命周期很短,执行某个方法时临时被初始化,方法结束即被回收。

如果局部变量与属性重名,则遵守就近原则,可以使用this区分,后续学习

属性可以在整个类中使用,局部变量只在当前方法中使用

属性都有默认的初始化值,如引用类型都是null,整型是0等,局部变量不被自动初始化,必须手工初始化,如taskname手工指定为null才为null,而属性name默认就为null

final修饰符

final修饰属性、局部变量,值不能被修改

final修饰类,不能被继承

final修饰方法,不能被子类覆盖

,继承

(1)概念、特点、作用

继承机制是面向对象程序设计不可缺少的关键概念,是实现软件可重用的根基,是提高软件系统的可扩展性与可维护性的主要途径。

所谓继承是指一个类的定义可以基于另外一个已经存在的类,即子类基于父类,从而实现父类代码的重用,子类能吸收已有类的数据属性和行为,并能扩展新的能力。

继承的形式

【访问权限修饰符】【修饰符】子类名  extends  父类名{子类体}

继承的作用:代码复用

子类对象可以直接调用父类的属性和方法

(2)Java类的基本结构

类的结构

属性:对象数据的描述;

方法:对象的行为;(可以做的事情)

构造方法:用于实例化对象;

内部类:(inner class)即在类体中声明的类。

块:分为静态块,实例块

(3)super关键字用途

super关键字代表父类的引用,在程序中主要的用途

在子类构造方法中要调用父类的构造方法,需要注意:super语句只能出现在子类构造方法体的第一行。

当子类方法体中的局部变量或者子类的成员变量与父类成员变量同名时,即子类局部变量覆盖父类成员变量时,用super.成员变量名”来引用父类成员变量

当子类的成员方法覆盖了父类的成员方法时,也就是子类和父类有完全相同的方法定义(方法体可以不同),此时,用super.方法名(参数列表)”的方式访问父类的方法。

this的区别,this通常指代当前对象,super

子类构造方法中要调用父类构造方法

在子类构造方法中要调用父类的构造方法,需要注意:super语句只能出现在子类构造方法体的第一行。

super调用父类成员变量或方法

子类中的成员变量或方法与父类中的成员变量或方法同名。因为子类中的成员变量或方法名优先级高,所以子类中的同名成员变量或方法就隐藏了父类的成员变量或方法,但是我们如果想要使用父类中的这个成员变量或方法,就需要用到super

thissuper

this通常指代当前对象,super通常指代父类对象

(4)this关键字

this关键字代表自身,在程序中主要的用途

使用this关键字在自身构造方法内部引用其它构造方法

使用this关键字代表自身类的对象

直接使用this

使用this关键字引用成员变量

使用this关键字引用成员方法

注意:this关键字必须放在非静态方法里面

this引用成员变量

在一个类的方法或构造方法内部,可以使用this.成员变量名”这样的格式来引用成员变量名,常常用来区分同名的成员变量和局部变量。

this引用构造方法

在一个类的构造方法内部,也可以使用this关键字引用其它的构造方法,这样可以降低代码的重复,也可以使所有的构造方法保持统一,这样方便以后的代码修改和维护,也方便代码的阅读。

this引用成员方法

在一个类的内部,成员方法之间的互相调用时也可以使用this.方法名(参数)”来进行引用。

在一个类的内部,成员方法之间的互相调用时也可以使用this.方法名(参数)”来进行引用。

在一个类的内部,也可以使用this代表自身类的对象,或者换句话说,每个类内部都有一个隐含的成员变量,该成员变量的类型是该类的类型,该成员变量的名称是this

(5)方法覆盖的定义

子类可以重写父类中某一个方法,称为方法覆盖,也称方法重写,是继承中非常重要的知识点。如果子类需要修改从父类继承到的方法的方法体,就可以使用方法覆盖。

方法覆盖的原则

同名

同参

同返回值

访问权限不能缩小

阅读全文
0 0
原创粉丝点击