Java基础之面向对象

面向对象

学习目标

1.掌握面向对象思想

2.认识类与对象

3.面向对象特点

4.掌握接口及构造方法

5.关键字this、static、final、finally、super等

6.内部类

一、面向对象思想

面向过程:具体化

面向对象:模型化

​ 将数据以及解决问题的方法封装起来,通过继承、多态来实现,方便我们使用。

二、类与对象

1.定义

对象:一个具体的实体、事物

类:把具有相同属性和作用的对象归为一类,进行抽象描述

2.类

类包括属性(常量和变量)和方法。

1.变量
1.全局变量

​ 定义在类里面的变量,可以被任何类或方法使用。

2.局部变量

​ 从定义的作用域开始,到代码块结束

3.类变量(静态变量)

​ 类变量又叫静态变量,在定义类的同时,用static来修饰该变量,使用时需要用类名.变量名,使用对象也可以使用。当使用类改变变量的值,其值也会发生变化。

4.成员变量

​ 在类中的变量,必须先实例化才能使用的变量

2.变量的联系与区别

成员变量:作用范围是整个类,定义在方法体和语句块之外,一般定义在类的声明之下;成员变量包括实例变量和类变量。

实例变量:独立于方法之外的变量,无static修饰,声明在一个类中,数值型变量默认值为0;布尔型默认值为false;引用类型默认值为null

类变量:用static修饰,属于对象共有,存储在静态存储区。

​ 调用:

​ 类名.静态变量名/对象名.静态变量名

局部变量:类的方法中的变量,在栈上分配,无默认值,必须经初始化

3.创建对象
(1)声明变量
(2)实例化对象
(3)初始化变量

三、面向对象特点

1.封装
2.继承

​ Java中支持单继承,不能多继承,但可以多重继承。

1.重写和重载的区别
3.多态
1.抽象
1.抽象类

​ ①不能直接创建对象

​ ②抽象类不能被实例化

​ ③可以有抽象方法也可以没有

2.抽象方法

​ 只有声明,没有方法体

2.多态的实现

​ ①父类名称 对象名=new 子类名称();

​ ②接口名称 对象名=new 实现类名称();

3.多态的访问规则
1.访问成员变量:编译看左边,运行看左边
2.访问成员方法:编译看左边,运行看右边
4.多态的转型
1.向上转型

向上转型是安全的,小范围转向大范围;但是对象一旦向上转型为父类的话,无法调用子类原本的特有内容

格式:

​ 父类名称 对象名=new 子类名称();

2.向下转型进行还原

格式:

​ 子类名称 对象名=(子类名称)父类对象;

3.instanceof

四、接口和构造方法

I.接口

1.接口最重要的内容是抽象方法,从Java8开始,可以定义默认方法、静态方法,Java9开始,可以定义私有方法。

2.接口中抽象方法的修饰符:public abstract

3.接口中可以定义成员变量,修饰符:public static final

4.接口中的常量必须进行赋值

5.接口中没有静态代码块和构造方法

II.构造方法
1.构造方法在什么时候运行?

​ 在new的时候会自动运行,且只运行一次。

2.每个类当中,必须拥有构造方法

​ 构造方法不写也是有的,编译时,会自动检查类中是否有构造方法,如果没有,编译器会自动添加一个构造方法。

3.注意事项

1.接口中没有自动的构造方法

2.静态代码块比构造方法先执行

4.普通方法和构造方法的区别

①构造方法的方法名必须和类名相同,普通方法没有特殊要求

②构造方法在对象创建的时候就执行一次,而且只执行一次;而普通方法是在对象被创建后需要使用时才被调用,可以多次被调用

5.有了构造方法之后,可以对对象的属性进行初始化,那么还需要对应的setter和getter方法吗?

​ 需要,因为对象在创建后需要修改和访问相应属性时,就可以通过set和get方法来操作。

6.构造方法里可以有return吗?

​ 可以,但没有意义

五、关键字

I.static

1.static是属于类的,不属于对象自己

2.有了static都推荐使用类名称来进行调用

3.静态不能直接访问非静态,在内存中,“先有的”静态内容,"后有的”非静态

4.静态方法中不能使用this,this调用的是当前对象

5.静态代码块只会执行唯一的一次,用来一次性的对静态成员变量进行赋值

6.为什么main方法所在的类,在定义其他自定义方法的时候,都要用public static修饰?

只有main方法在公有级别时,才会对JVM可见;而且main方法是所有程序的入口,不通过对象调用某个方法,只有将该方法定义为静态方法。JVM对于Java程序已经是最底层,由它调用的方法的返回值已经没有任何地方可去,所以用void修饰。

II.this

1.this可以在本类的构造方法之间进行调用

2.this()只能写到代码第一行

3.this.的方式,区分封装里面局部变量和成员变量同名的情况

III.super

1.子类可以通过super()调用父类的构造方法

2.super(参数)调用的是父类的有参构造方法

3.super()只能写到代码第一行

4.this和super不能同时存在。

5.所有类的构造方法,默认第一行都是super();

IV.final

1.final用法:

​ 定义一个成员变量;

​ 用final修饰的成员变量,必须进行手动赋值

​ 修饰一个局部变量;

​ 用final修饰的局部变量,不能更改

​ 修饰一个类;

​ 用final修饰的类,不能有子类

​ 修饰一个方法。

​ 用final修饰的方法,不能被覆盖重写

2.对于类来说,abstract和final不能同时使用

六、内部类

成员内部类

1.定义格式

​ 修饰符 class 外部类名称{

​ 修饰符 class 内部类名称{

​ }

}

2.注意:内用外,随便访问;外用内,需要内部类的对象

3.使用成员内部类

​ 直接访问:外部类名称.内部类名称 对象名=new 外部类名称().new 内部类名称();

​ 间接访问: 在外部类的方法中,使用内部类

局部内部类:定义在方法内部

1.只有当前所属的方法才能使用它

2.局部内部类中,如果希望访问所在方法的局部变量,那么这个局部变量必须是有效的final

匿名内部类:省略类的定义,只使用一次

1.定义格式:

​ 接口名称 对象名=new 接口名称(){

​ //覆盖重写的所有抽象方法

​ };

2.匿名内部类,在创建对象的时候,只使用唯一的一次。

3.匿名对象,在调用方法的时候,只能调用唯一的一次。

4.匿名内部类和匿名对象不是一回事。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值