JAVA——面向对象(进阶篇)

深入学习面向对象

static、继承、包、final、权限修饰符、代码块、抽象类、接口、多态、内部类

一、static

static表示静态,是JAVA中的一个修饰符,可以修饰成员方法、成员变量。

1.1静态变量

被static修饰的成员变量,叫做静态变量

特点:

(1)被该类所有对象共享

(2)不属于对象,属于类

(3)随着类的加载而加载,优先于对象存在

调用方式:

1、类名调用(推荐)

2、对象名调用

例子:

private String student;//在JavaBean里面
public static String teachername;//在JavaBean里面    老师是共享的,所以可以用static修饰



Student.teacherName = "丸子老师"; //假设JavaBean类类名为Student,直接用类名调用静态变量就好

2.1静态方法

被static修饰的成员方法,叫做静态方法

特点:

(1)多用在测试类工具类

(2)JavaBean类中很少会用

调用方式:

(1)类名调用(推荐)

(2)对象名调用 

2.2补充解释工具类、测试类、JavaBean类

JavaBean类:用来描述一类事物的类。比如,Student、Teacher、Dog、Cat等

测试类:用来检查其他类是否书写正确,带有main方法的类,是程序的入口

工具类:不是用来描述一类事物的,而是帮我们做一些事情,但是不描述任何事物的类

工具类:

(1)类名见名之意

(2)私有化构造方法(因为没有实际意义)

(3)方法定义为静态(方便调用,统一的)

3.1static的注意事项

(1)静态方法只能访问静态变量和静态方法

(2)非静态方法可以访问静态变量或者静态方法,也可访问非静态变量或者非静态方法

(3)静态方法中是没有this关键字的

(4)因为测试类中的main方法是静态的,所以测试类中其他方法也是静态的

面向对象三大特征:封装、继承、多态

二、继承

1、概念

(1)继承是面向对象三大特征之一,可以让类和类之间产生子父关系;

(2)可以把多个子类中重复的代码抽取到父类中,子类可以直接使用,减少代码冗余,提高代码复用性;

(3)继承的格式:public  class  子类  extends  父类 { };

(4)继承后,子类可以得到父类的属性和行为,子类可以使用;子类可以在父类的基础上新增其他功能,使子类更加强大。

2、继承的特点

JAVA只支持单继承,不支持多继承,但支持多层继承

JAVA中所有的类都直接或间接继承与Object类

多层继承:子类A继承父类B,父类B可以继承父类C

子类只能访问父类中非私有的成员

3、子类能继承父类的哪些内容

子类能继承父类的哪些内容
非私有private
构造方法不能不能
成员变量
成员方法不能

能继承,但不一定能用!!!!

4、就近原则

5、方法的重写

当父类的方法不能满足子类现在的需求时,需要进行方法的重写

书写格式:

在继承体系中,子类出现了和父类中一模一样的方法声明,我们称子类这个方法是重写方法

@Override重写注解

1、@override是放在重写后的方法上,校验子类重写是语法是否正确

2、加上注解后如果有红色波浪线,表示语法错误

3、建议重写方法都加@Override注解

方法重写注意事项和要求:

1、重写方法的名称、形参列表必须与父类中的一致

2、子类重写父类方法时,访问权限子类必须大于等于父类

3、子类重写父类方法时,返回值类型子类必须小于等于父类

4、建议:重写的方法尽量和父类保持一致

5、私有方法不能被重写

6、子类不能重写父类的静态方法,如果重写会报错的

三、多态

1、什么是多态

对象的多种形态

2、多态的前提

有继承/实现关系

有父类引用指向子类对象

有方法重写

3、多态的好处

使用父类型作为参数,可以接收所有子类对象,体现多态的扩展性与便利

4、多态调用成员变量和成员方法

调用成员变量:编译看左边,运行也看左边

调用成员方法:编译看左边,运行看右边

5、多态的优势和弊端

优势:方法中,使用父类型作为参数,可以接收所有子类对象

弊端:不能使用子类的特有功能,()但可以强转)

引用数据类型的类型转换有2种方式:自动类型转换、强制类型转换

强制类型转换能解决什么问题?

(1)可以转换成真正的子类类型,从而调用子类独有功能

(2)转换类型与真实对象类型不一致会报错

(3)转换的时候用instanceof关键字进行判断

四、包和final

包:就是文件夹,用来管理各种不同功能的JAVA类,方便后期代码维护

包名的规则:公司域名反写 + 包的作用,需要全部英文小写,见名之意。

全类名:包名+类名

不需要导包的情况:

1、使用同一个包中的类时,不需要导包

2、使用java.lang包中的类时,不需要导包

3、其他情况都需要导包

4、如果同时使用两个包中的同类名,需要用全类名

final

方法:表明该方法时最终方法,不能被重写

类:表明该类是最终类,不能被继承

变量:叫做常量,只能被赋值一次

(常量的概念:

实际开发中,常量一般作为系统的配置信息,方便维护,提高可读性

常量的命名规范:

单个单词:全部大写

多个单词:全部大写,单词间用下划线隔开)

细节:

1、final修饰的变量是基本类型:那么变量储存的数据值不能发生改变

2、final修饰的变量是引用类型:那么变量储存的地址值不能发生改变,对象内部的可以改变

五、权限修饰符和代码块

权限修饰符

是用来控制一个成员能够被访问的范围的

可以修饰成员变量,方法,构造方法,内部类

权限修饰符的分类:

有四种作用范围由小到大(private<空着不写<protected<public)

修饰符同一个类中同一个包中其他类不同包下的子类不同包下的无关类
private
空着不写
protected
public

权限修饰符的使用规则

实际开发中,一般只用private和public

1、成员变量私有

2、方法公开

特例:、

如果方法中的代码是抽取其他方法中共性代码,这个方法一般也私有

代码块

1、局部代码块:

提前结束变量的生命周期(已淘汰)

2、构造代码块:

抽取构造方法中的重复代码(不够灵活)

3、静态代码块 :

数据的初始化(重点)

静态代码块

格式:static{}

特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发,只执行一次

使用场景:在类加载的时候,做一些数据初始化的时候使用

六、抽象类和抽象方法

1、抽象类的作用:

抽取共性时,无法确定方法体,就把方法定义为抽象的,强制让子类按照某种格式重写。

抽象方法所在的类,必须是抽象类。

2、抽象类和抽象方法的格式:

public abstract 返回值类型 方法名(参数列表);

public abstract class 类名{};

3、继承抽象类有哪些要注意:

(1)要么重写抽象类中的所有抽象方法

(2)要么是抽象类

七、接口

1、接口中成员的特点

(1)成员变量:只能是常量(默认修饰符:public  static  final )

(2)构造方法:没有

(3)成员方法:只能是抽象方法(默认修饰符:public  abstract )

(4)JDK7以前:接口中只能定义抽象方法

(5)JDK8的新特性:接口中可以定义有方法体的方法(默认/静态)

(6)JDK9的新特性:接口中可以定义私有方法

2、接口和类之间的关系

(1)类和类之间的关系:继承关系,只能单继承,不能多继承,但是可以多层继承

(2)类和接口的关系:实现关系,可以单实现,也可以多实现,还可以再继承一个类的同时实现多个接口

(3)接口和接口的关系:继承关系,可以单继承,也可以多继承

八、内部类

1、什么是内部类

类的五大成员:属性、方法、构造方法、代码块、内部类

写在一个类里面的类就叫做内部类

2、内部类的访问特点

内部类可以直接访问外部类的成员,包括私有

外部类要访问内部类的成员,必须创建对象

3、什么时候用到内部类

B类表示的事物是A类的一部分,且B单独存在没有意义。

比如:汽车的发动机,ArrayList的迭代器,人的心脏等

 4、内部类的分类

(1)成员内部类:了解
(2)静态内部类:了解
(3)局部内部类:了解
(4)匿名内部类

匿名内部类本质上就是隐藏了名字的内部类,可以写在成员位置,也可以写在局部位置

格式:                                                                          继承\实现关系(整体就是一个类的子类对                                                                                                                  象或者接口的实现类对象)

        new  类名或者接口名(){                                   方法重写

                重写方法;                                                   创建对象

};

-----------------------------------------------------------------------------------------------------------------------------

举例:

        new  Inter(){

        public  void  show(){

        }

使用场景:

        当方法的参数是接口或者类时,以接口为例,可以传递这个接口的实现类对象,如果实现

        类只要用到一次,就可以用匿名内部类简化代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值