JAVA面向对象
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JAVA面向对象,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含9812字,纯文字阅读大概需要15分钟。
内容图文
面向对象:
类是对现实世界事物的描述,是抽象的、概念上的定义 ? 对象是实际存在的该类事物的一个个体,因而也称实例
1.java类及类的成员
属性:
名称:Field = 属性 = 成员变量
含义:对应类中的成员变量(描述事物的特征)
格式:修饰符 类型 属性名 =初值 ;
属性(成员变量)VS 局部变量
相同点:
1.定义变量的格式:数据类型 变量名=变量值
2.先声明,后使用
3.变量都有其对应的作用域
不同点:
1.在类中声明位置不同
属性:直接定义在类中的一对{}内
局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部变量
2.关于权限修饰符的不同
属性:可以在声明属性时,指明其权限,使用权限修饰符
常见的权限修饰符:private、public、缺省、protected
局部变量:不可以使用权限修饰符
3. 默认初始化值的情况:
属性:类的属性,根据其类型都有默认初始化值
整形(byte、short、int、long)=0
浮点型(float、double)=0.0
字符型(char)=0或’\u0000’
布尔型(boolean)=false
引用数据类型:null
局部变量:没有默认初始化值
调用局部变量之前一定要显性赋值
形参在调用时,直接赋值
4.在内存中加载的位置:
属性:加载到栈内存
局部变量:加载到堆内存
属性赋值的顺序:
①属性默认初始化
②属性显式初始化或者属性显式初始化(按照声明先后顺序)
③构造器中初始化构造器中初始化构造器中初始化构造器中初始化
④通过对象调用属性或方法的方式修改属性值
方法:
名称:Method = (成员)方法 = 函数
含义:对应类中的成员方法(描述事物的行为)
格式:修饰符 返回值类型 方法名 ( 参数列表) { 方法体语句; ? }
方法的重载:
定义:同一类下同名、参数顺序、个数、参数类型不同的方法
方法的重写:
定义:子类重写父类的方法
ps:
1.方法名相同,参数列表相同(参数顺序、个数、类型)
2.返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类访问修饰符
3.访问范围需要大于等于父类的访问范围
4.父类的成员方法只能被它的子类重写。
5.声明为 static 的方法不能被重写,但是能够被再次声明。
6.子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
7.子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
8.重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方 法声明的更广泛的强制性异常,反之则可以。
9.构造方法不能被重写。
重载和重写的区别
区别点 | 重载方法 | 重写方法 |
---|---|---|
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可以修改 | 一定不能修改 |
异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |
递归方法:
作用:将大问题分解为一个相同的小问题。
自己调用自己
构造器:
格式:修饰符 类名 (参数列表) { ? 初始化语句; ? }
隐式无参构造器(编译器默认提供) ? 显式定义一个或多个构造器(无参、有参)
特点:
1) 方法名和类名一致, 唯一允许首字母大写的方法名.
2) 不声明返回值类型, 连void也没有.
3) 不能被一些关键字修饰, static, abstract, native....
4) 不可以像普通 方法一样随意调用
5) 父类的构造器不可被子类继承
如果在类中并没有提供任何构造器,编译器会自动添加一个缺省的构造器
特点 : 修饰符和类一致, 无参, 无语句
如果在类中已经提供了构造器, 编译器就不会再自动添加缺省构造器了!!
构造器也可以重载 (定义多个构造器): 只要参数不同就能重载
作用:
1.创建对象 类型 地址(指向对象)=new + 构造器;
2.初始化对象信息
总结:属性赋值的先后顺序
① 默认初始化
② 显式初始化
③ 构造器中初始化
④ 通过"对象.方法" 或 "对象.属性"的方式,赋值
以上操作的先后顺序:① - ② - ③ - ④
代码块:
非静态代码块:没有static修饰的代码块 格式:{}
1.可以有输出语句。 ? 2.可以对类的属性、类的声明进行初始化操作。 ? 3.可以调用静态的变量或方法。 ? 4.若有多个非静态的代码块,那么按照从上到下的顺序依次执行。 ? 5.每次创建对象的时候,都会执行一次。且先于构造器执行
静态代码块:用static 修饰的代码块 格式:static{}
1.可以有输出语句。 ? 2.可以对类的属性、类的声明进行初始化操作。 ? 3.不可以对非静态的属性初始化。即:不可以调用非静态的属性和方法。 ? 4.若有多个静态的代码块,那么按照从上到下的顺序依次执行。 ? 5.静态代码块的执行要先于非静态代码块。 ? 6.静态代码块只执行一次
作用:对Java对象进行初始化
执行顺序:静态代码块 > 构造代码块 > 构造函数。
编译器会把所有静态语句块合体, 还有静态属性的显式赋值合体, 合体后的方法名 public void <clinit>() {} 编译器在编译时, 会把所有非静态块和显式赋值语句合体, 还会再把适当的构造器也合体, 生成一个方法 public void <init>()
内部类:
按照声明位置来分
1) 成员内部类 : 类中方法外的内部类 静态成员内部类不需创建对象、非静态成员内部类需要创建对象 1) 普通内部类 : 没有static修饰的内部类 2) 嵌套类 : 有static修饰的内部类
2) 局部内部类 : 声明在方法中的内部类 1) 普通局部内部类 : 在方法中声明 , 有类名 2) 匿名内部类 : 在方法中声明, 没有类名
就适用于一次性使用某个类的对象.
2.面向对象的三大特征
封装
将数据声明为私有的(private),再提供公共的(public)方法:getXxx()和setXxx()实现对该属性的操作
修饰符
继承:与抽象方法和多态相结合
内容:继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得 子类具有父类相同的行为。
格式:
class 父类 {}
class 子类 extends 父类 {}
子类可以重写父类的方法、实现了对父类方法的拓展
作用:1.继承的出现提高了代码的复用性。 2.继承的出现让类与类之间产生了关系,提供了多态的前提。
ps:继承只能单继承
子类会继承父类的静态和非静态方法, 但是只有非静态方法有多态性, 静态方法没有多态性, 因为它们是共存的.
Object类是所有Java类的根父类
多态:
属性没有多态性, 属性的访问只取决于引用类型. 如果是父类类型, 访问的就是从父类继承的属性, 如果是子类类型, 访问子类中的属性
条件:继承、重写、父类的引用指向子类的对象
内容:父类的引用指向子类的对象,不能再访问子类中添加的属性和方法
虚拟方法调用:当调用父类同名同参的方法时,执行的是子类重写父类的方法。
instanceof :x instanceof A:检验x是否为类A的对象,返回值为boolean型。
多态一般为向上转型,即将一个详细描述的事务转换为粗略描述的事务,不在关系特有的属性与方法。例:子类可以向上转型为父类、 接口。
3.其它关键字
package:
含义:指明该文件中定义的类所在的包
格式:package 顶层包名.子包名 ;
1.一个项目中,可能涉及到几十到几百个类,为了更好的区分并整理不同的类的功能,我们使用包的概念。 ? 2.包的声明格式:“层次1.层次2.层次3....” ? 3.包的命名遵循标识符的命名规则和规范:xxxyyyzzz ? 4.每“.”一次,表示一层文件目录 ? 5.包的声明,需要定义在源文件的首行。
import:
含义:引入指定包层次下所需要的类或全部类
格式:import 包名[.子包名…]. <类名 |*>
ps:
1.声明在包的声明和类的声明之间。 ? 2.如果需要导入多个类或接口,那么就并列显式多个import语句即可 ? 3.如果在代码中使用不同包下的同名的类。那么就需要使用类的全类名的方式指明调用的是哪个类。 ? 4.import static组合的使用:调用指定类或接口下的静态的属性或方法 ? 5.如果已经导入java.a包下的类。那么如果需要使用a包的子包下的类的话,仍然需要导入。
this:
含义:当前对象或当前正在创建的对象,调用本类的属性,方法,构造器
ps:1.在本类的一个构造器内使用this关键字调用本类的另一个构造器时,必须将this关键字放在首行,因此同一个构造器内至多使用 一次this
TestThis(int a, int b) {
// TestThis(); //这样是无法调用构造方法的!
this(); // 调用无参的构造方法,并且必须位于第一行!1
a = a;// 这里都是指的局部变量而不是成员变量
// 这样就区分了成员变量和局部变量. 这种情况占了this使用情况大多数!
this.a = a;
this.b = b;
}
2.声明了多个构造器的类中至少有一个构造器不调用this关键字
3.this不能用于static方法中。
interface:
接口的关键字
格式:
public interface Flyable {
public final int wingsNumber = 2;
public abstract void fly();
}
接口:
定义:现实世界不同类型事务的共同行为特征。体现了类的扩展性(抽象的极致)例:飞行:鸟、飞机
接口的意义是被子类实现,子类要实现接口的所有抽象方法。
关键词:implements
public class FlyerTest{
public static void main(String[] args){
//将具体类当作接口类来调用(多态)
flyer f = new Plane();
}
}
ps:接口与继承:
子类可以实现多个接口
子类只能继承一个父类
//一个子类即继承有实现接口时编码顺序先继承后实现
public class Bird extends Pet implements Flyer{
}
?
具体类:对某种事物抽象定义
抽象类:对某类不同种事物抽象定义
接口:对不同类不同事物的共同行为的抽象定义
接口中的所有方法均为公共抽象方法
接口中属性只能包含全局常量(实际项目中不使用)
接口可以多继承原因:接口的方法是抽象的
抽象类实现接口,即可以不用理会接口中的抽象方法
接口最终表达的是实现能力或某个标准规范。例:USB标准。
接口的特点:
用interface来定义。
接口中的所有成员变量都默认是由public static final修饰的。
接口中的所有方法都默认是由public abstract修饰的。
接口没有构造器。
接口采用多继承机制。
abstract:
可修饰:
类:抽象类
方法:抽象方法
不可修饰:
属性、私有方法、构造器、静态方法、final的方法。
super:
super可用于访问父类中定义的属性
super可用于调用父类中定义的成员方法
super可用于在子类构造方法中调用父类的构造器
ps:
尤其当子父类出现同名成员时,可以用super进行区分
super的追溯不仅限于直接父类
super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识
super 用于标识从父类继承的成员, 可以访问属性和方法.
this 表示对象整体
调用父类构造器
super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。与this调用构造器二选一
ps:在构造器首行没有声明this(形参列表)或super(形参列表)则默认调用父类的空参构造器:super()
Chinese() {
super(); // 调用父类构造方法
其他代码
}
static:
可修饰:
属性:数据不再依赖于某个对象的存在而存在, 反而是所有对象应该共享的数据时, 使用静态属性
方法:当方法的调用不需要通过对象, 或者说方法的执行和调用者无关, 这样的方法写成静态方法
代码块:静态代码块、类加载时只执行一次
内部类:
非静态属性或对象属性或称为实例变量, 它隶属于对象
因为对象的存在的不确定性, 所以称它为非静态
特点:
随着类的加载而加载 例:静态属性或类属性. 它隶属于类 ? 优先于对象存在 ? 修饰的成员,被所有对象所共享 ? 访问权限允许时,可不创建对象,直接被类调用
final:
可以修饰
类:类不可被继承
方法:该方法不能被重写
变量:属性为常量,名称大写,且只能被赋值一次。
抽象:
关键字: abstract
可修饰:类、方法。
不可修饰:属性、私有方法、构造器、静态方法、final的 方法
抽象类:
包含:属性、构造器、具体方法、抽象方法
目的:某一类都会有这个方法,但是方法的具体实现步骤不清除(不确定),将此方法定义为抽象方法交给具体子类来实现。例:动物类:抽象方法(吃、叫)具体子类:猫类:(鱼、喵喵喵)。。。
不能被实例化、可继承、子类必须重写父类的抽象方法、提供方法体,若没有重写全部的抽象方法,仍为抽象类。
ps:抽象类不能创建对象的原因是因为抽象类可能包含抽象方法。而抽象方法不能实例。
只能被子类继承
抽象类不一定有抽象方法,有抽象方法的一定是抽象类
抽象方法:
只有方法的声明,没有方法的实现。以分号结束
例:abstract int abstractMethod( int a );
内容总结
以上是互联网集市为您收集整理的JAVA面向对象全部内容,希望文章能够帮你解决JAVA面向对象所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。