面向对象编程三大特征

面向对象三大特征:封装、继承、多态的概述以及其优点。

static

        static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量
        可以直接通过类名调用
        静态变量 特点:被该类所有对象共享不属于对象,属于类
        静态变量随着类的加载而加载的,优先于对象出现的
        调用方式:类名调用    对象名调用
​
        -------------------------
        静态方法
        
        被static修饰的成员方法
        特点:多用于测试类个工具类中
        工具类:帮助我们做一些事情,但是不描述任何事物的类
        类名见名知意   私有化构造方法  方法都定义为静态
        javabean类  用来描述一类事物的类。 student teacher
        测试类  用来检查其他类是否书写正确,带有main方法,是程序的主入口
        javabean类中很少会用
        调用方式:类名调用

static的注意事项

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

2、非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量个非静态的成员方法

3、静态方法当中是没有this关键字

this:表示当前方法调用者的地址值

由虚拟机赋值

总结:静态方法中,只能访问静态

非静态方法可以访问所有

静态方法中没有this关键字

晚来的可以调用早来的,早来的不能调用晚来的(静态变量随着类的加载而加载的,优先于对象出现的)

重新认识main方法

public:被JVM调用,访问权限足够大

static: 被JVM调用,不用创建对象,直接类名访问

因为main方法是静态的,所以测试类中其他方法也需要是静态的

void :被JVM调用,不需要给JVM返回值

main :一个通用的名称,虽然不是关键字,但是被JVM识别

String[] args : 以前用于几首键盘录入数据的,现在没用

面向对象三大特征

封装

对象代表什么,就得封装对应的数据,并提供数据对应的行为

继承

Java中提供一个关键字extend是,用这个关键字,我们可以让一个类和另一个类建立起继承关系。

public class Student extends Person{}

Student称为子类(派生类),Person称为父类(基类或超类)

使用继承的好处

1、可以把多个子类中重复的代码抽取到父类当中,提高了代码的复用性

2、子类可以在父类的基础上,增加其他的功能,使子类更强大

继承需要学习的点

1、需要自己设计继承结构

2、如何用别人写好的继承结构

什么 时候使用继承:

当类与类之间,存在相同的(共性)的内容,并满足子类是父类中的一种,就可以考虑使用继承,来优化代码

总结:

什么是继承、继承的好处?

1、继承是面向对象三大特征之一,可以让类跟类之间产生子父的关系。

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

2、继承的格式?

public class 子类 extends 父类{}

3、继承后子类的特点?

子类可以得到父类的属性和行为,子类可以使用。

子类可以在父类的基础上新增其他功能,使子类更强大。

继承的特点

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

单继承:一个子类只能继承一个父类

不支持多继承:子类不能同时继承多个父类

多层继承:

子类A继承父类B,父类B可以继承父类C 每一个类都直接或间接的继承于Object

注意事项:子类只能访问父类中非私有的成员

子类到底能继承父类中的哪些内容?

构造方法 非私有--不能 private--不能

成员变量 非私有--能 private--能

成员方法 非私有 private

构造方法的名字和子类的类名不一样

虚方法表 非private 非static 非final

只有父类中的虚方法表才能被继承

继承中:成员变量的访问特点

就近原则 : 先在局部位置找,本类成员位置找,父类成员位置找,逐级往上

出现重名的成员变量

name 从局部变量开始向上找

this. 从本类成员位置开始向上找

super. 从父类成员位置开始向上找

继承中:成员方法的访问特点:

this调用:直接调用满足就近原则

super调用:直接访问父类

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

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

@Override重写注解

1.@Override是放在重写后的方法上,校验子类重写时语法是否正确。

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

3.建议重写方法都加上@Override注解。

方法重写的本质:覆盖了虚方法表中的方法

方法重写注意事项很要求

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

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

空着不写<protected<public

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

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

5、只有被添加到虚方法表中的方法才能被重写。

继承中:构造方法的访问特点

1、父类中的构造方法不会被子类继承,但是可以通过super调用

2、子类中所有的构造方法默认先访问父类中的无参构造,再执行自己

(为什么?)

子类在初始化的时候,有时候会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据。

子类初始化之前,一定要调用父类构造方法先完成父类数据空间的初始化

怎么调用父类构造方法的?

子类构造方法的第一语句默认都是:super().不写也存在,且必须在第一行

如果想调用父类中的有参构造,必须手动写super进行调用

this、super使用总结

this:理解为一个变量,表好似当前方法调用者的地址值

super:代表父类存储空间

多态

什么是多态?

同类型的对象,表现出的不同形态

Student s = new student;                                       //学生的形态

Person p = new student;                                       //人的形态

多态的表现形式

父类对象 对象名称 = 子类对象

多态的前提:

有继承关系

有父类引用指向子类对象 Fu f = new Zi();

有方法重写

多态的好处:

使用父类作为参数,可以接收所有子类对象

体现多态的扩展与遍历

多态调用成员的特点

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

Javac编译代码的时候,会看左边的父类中有没有这个变量,如果有,编译成功,如果没有编译失败

Java运行代码的时候,实际上获取的就是左边父类中成员变量的值

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

编译代码的时候会看左边的父类中有没有这个方法,如果有,编译成功,如果没有编译失败

运行代码的时候,实际上运行的是子类中的方法

理解:

Animal a = new Dog();

现在用a去调用变量和方法,而a是Animal类型的,所以默认都会从Animal这个类中去找。

成员变量:在子类的对象中,会把父亲的成员变量也继承下来。

成员方法:如果子类对方法进行了重写,那么在虚方法表中是会把父类的方法进行覆盖。

多态的优势和弊端

优势:

业务逻辑发生改变时,后续的代码无需修改。

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

弊端:

不能调用子类的特有功能。

解决方案:

将调用者变回子类类型

Dog d = (Dog)a;

变量类型判断(a instanceof Dog)

新特性:

先判断后转换

if (a instanceof Dog d){

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值