面向对象编程(封装、继承、多态)

8 篇文章 0 订阅

一:包

1.包的作用:相当于一个文件夹,保证类的唯一性,导入类的成员与方法

2.怎样导入包(import):

普通包的导入:
(1)import 包名.类名
eg:import person.china;
(2)import 包名.* ;(导入这个包的所有类)
eg:import person.* ;

静态包导入(导入一个类的静态方法和属性):
import static 包名.类名;
作用:静态方法和静态属性可以在当前类中直接调用,无需使用类名调用

二:封装(包的访问权限)

封装:封装自己的属性和方法(把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法set、get)

private:同一包中的同一类
default:同一包中的不同类
protected:不同包中的子类(可以在不同包中只能被自己和自己的子类调用)
public:任何时候都可以调用

private<default<protected<public

三.继承(extends)

1.继承的含义和调用
(1)子类继承父类的所有成员变量和成员方法,还可以根据自身情况扩展
(2)一个子类只能继承一个父类,但是子类可以多层继承 (可以有孙子)
(3)实例化子类时编译器会先实例化父类,子类使用super访问父类对象,调用时先调用父类再调用子类
2.final关键字
(1)修饰属性
表示这个属性是常量,无法被修改
(2)修饰类
表示这个类到此为止不能被继承,但可以被调用
若要保证当前类的唯一性,用final修饰当前类,保证此类所有人用的都是一样的
(3)修饰方法
该方法不能被重写
3.组合
一个类包含其他类,例如学校类包含学生类和老师类

4.类和类的三种关系
继承(树状)、组合(包含)、毫无关系

例题:求:输出顺序
请添加图片描述

静态代码块:用于初始化静态成员属性,不管类产生多少对象,静态代码块在类加载时调用,且只调用一次,优先于其他代码块。程序从main开始执行,main用到哪个类就加载哪个类,所以静态代码块优先于main执行(3->6->7)
构造代码块:用于初始化成员变量,优先于构造代码执行,并且有几个对象产生构造块就执行多少次(2->1->5->4->2->1->5->4)
子类和父类:调用子类先调用父类

四、多态

1.普通的引用
当前类 当前类的引用名称=new当前类();
eg:Person person=new Person();
2.引用的向上转型
父类 父类引用名称=new 子类();
eg:Person person =new China();
China继承Person

3.向上引用的表现形式
(1)直接赋值
Person person=new China();
(2)传参
向上引用用于方法传参,传父类,子类都可以用,不用再为子类参数不一样去重载多次
请添加图片描述
(3)方法返回值,把一个子类对象转换为一个父类的引用
请添加图片描述
4.动态绑定
父类应用调用子类对象,看new谁,就调用谁
请添加图片描述

5.方法的重写
发生在有继承关系的类中,子类的方法名、参数个数和类型、返回值(向上引用除外)与父类完全相同

重写的两个的要求:
(1)子类重写方法权限要大于等于父类
(2)子类的返回值与父类一直,向上转型除外
请添加图片描述
方法的重载:
发生在一个类中,方法的名称相同,参数个数或类型不同的一组方法,与返回值无关,也无权限要求
请添加图片描述
6.多态
一个引用在不同场景调用同一个方法表现出的不同行为(向上转型+方法重写:父类和子类写了一组重写方法,子类对象根据父类引用调用这组重写方法,产生不同行为)
被调用的方法参数为父类,根据不同对象的引用,行为不同
请添加图片描述

使用多态的优点:
(1)对于调用者,使用成本降低
eg:对于动物类和它的子类,只需要动物类来操作子类
(2)避免多个if else分支和重载方法
(3)很方便进行扩展
新子类产生,调用时不用添加代码,直接用父类调用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值