10分钟带你快速了解面向对象

目录

快速了解面向对象

一起先来了解几个名词

那么 什么是面向对象?

什么是面向过程?

对象的创建:

面向对象的三大特征:

封装

什么是封装?

封装什么?

封装的好处:

如何实现封装:

继承:

什么是继承:

为什么要使用继承:

多态:

什么是多态?

 如何实现多态?

方法重载overload:

方法重写(覆盖)overriding:

向上/向下转型:

快速了解面向对象

一起先来了解几个名词

属性:用来描述同一类物体具有的特征

方法:描述一类事物可以执行的行为(操作)

对象:对象是类的具体。

类:类是对象的抽象,具有一组属性和方法。

tip:方法名要使用小驼峰命名法(第一个单词小写,之后首字母大写)

类名要使用大驼峰命名法(每个单词首字母大写)

返回值为void,写return编译报错。

那么 什么是面向对象?

我们通过把可以具有特定功能的类封装起来,当我们想要完成这件事时直接通过调用对应的类的对象来实现,而不关心对象具体怎么实现。(如果我们想吃饭,找个饭店,付钱就可以吃饭)

什么是面向过程?

我们想要实现一个功能的时候,分步骤的完成,最终去实现我们想要的功能。(如果我们想吃饭,我们需要按照制作饭菜流程每一步去完成做饭)

现实中的对象以及它的属性和方法。

对象的创建:

创建对象的方式和创建数据引用数据类型的方式一致。

对象也是一种数据类型,一种Class数据类型,也可以用来当做返回值。

面向对象的三大特征:

封装

什么是封装?

将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。(所有的方法都是封装的体现)

封装什么?

属性:用来描述同一类物体具有的特征

方法:描述一类事物可以执行的行为(操作)

封装的好处:

  • 避免制造大量不合理的属性;
  • 有利于提高系统之间的松耦合,提高系统独立性;
  • 提高了代码的可重用性;

tip:(耦合:不同模块之间的依赖关系,耦合度低可以避免系统“牵一发而动全身”,维护成本低)

(内聚:一个模块内的各个成分关联程度,一个模块只实现一个功能,每个成分都与实现这个功能有关则为高内聚)

如何实现封装:

  1. 修改属性的可见性;(设为private)
  2. 创建公有的getter/setter方法;(public)
  3. 在getter/setter中加入对属性值注入的判断;

继承:

什么是继承:

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

为什么要使用继承:

通过继承可以快速创建新的类,实现代码的重用,提高程序的可维护性,节省大量创建新类的时间,提高开发效率和开发质量。

多态:

什么是多态?

同一种事物,由于给予条件不同,产生的结果也不同。

 如何实现多态?

常见三种实现多态方式:方法重写(覆盖),方法重载,向上/向下转型。

方法重载overload:

在同一个类中;

方法名相同;

参数列表不同(顺序,数据类型,数据类型个数);

与返回值,访问修饰符无关;

方法重写(覆盖)overriding:

在父类与子类中;

方法名相同&&参数列表相同;

子类访问修饰符不能严于父类(public>protected>defaults>private);

子类返回值和父类相同或者为其子类;

父类静态方法,子类必须也是静态方法;(静态方法中不能使用supper)

父类的私有方法不能被子类覆盖;

不能抛出比父类更多的异常;

向上/向下转型:

向上转型:

<父类型> <引用变量名> = new <子类型>();

此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法此时通过父类引用变量无法调用子类特有的方法。

People people1 = new Athletes("白玉祥", 20, "男", "羽毛球", "全国世锦赛冠军");
		People people2 = new Performer("牛梵潞", 19, "男", "上海戏剧大学", "登封首富不是我");
		People people3 = new People("吴非凡", 19, "男");
		System.out.println("**********************");
		System.out.println("运动员白玉祥自我介绍:");
		people1.show();                  //实际调用的performer类的show方法

向下转型:

如果我们想使用子类特有的方法,这是我们就需要用向下转型。

<子类型> <引用变量名> = (<子类型> )<父类型的引用变量>;

Tip:向下转型为强制转型(如果没有转换为真实子类类型,会出现类型转换异常);

所以我们先用intanceof:判断是否可以向下转型,再强转,调用子类特有方法

    if(a1 instanceof Cat){
			   Cat c1=(Cat) a1;
		       c1.play();
		}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值