Java面向对象概述

本文深入介绍了Java的面向对象特性,包括类与对象的概念,面向对象与面向过程的区别及其优势,如易维护、高质量、高效和易扩展。接着详细阐述了封装、继承和多态这三大特征,封装注重安全性与复用性,继承提供了代码复用和事务建模的便利,多态则增强了代码的可扩展性。文章还涵盖了构造方法、super关键字和对象转型等相关内容。
摘要由CSDN通过智能技术生成

内容脑图:

在这里插入图片描述

一、什么是类,什么是对象

*****简单来说,类是抽象出某一类事物的行为和特征,并进行的封装,特征称之为属性,行为称之为方法;
*****对象就是这一类的具体实例,对象拥有这个类的所有属性和方法

*****用表格法举例:
全班所有学生表是一个类,学号、身高,年龄都是属性。每个学生吃饭、睡觉。就是方法。

二、面向对象与面向过程区别,有什么好处

区别
*****面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

*****面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

面向对象的好处:
1、易维护
*****采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
2、质量高
*****在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
3、效率高
*****在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
4、易扩展
*****由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。

三、 三大特征

1.封装

作用:
我们程序设计要追求“高内聚,低耦合”。 高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合是仅暴露少量的方法给外部使用,尽量方便外部调用。

封装优点:
提高代码的安全性。
提高代码的复用性。
“高内聚”:封装细节,便于修改内部代码,提高可维护性。
“低耦合”:简化外部调用,便于调用者使用,便于扩展和协作。

封装的实现—使用访问控制符

修饰符同一个类同一个包子类所有类
private*
default**
protected***
public****
*private 表示私有,只有自己类能访问

*default表示没有修饰符修饰,只有同一个包的类能访问
*protected表示可以被同一个包的类以及其他包中的子类访问
*public表示可以被该项目的所有包中的所有类访问
封装的使用细节

类的属性的处理:
一般使用private访问权限。
提供相应的get/set方法来访问相关属性,这些方法通常是public修饰的,以提供对属性的赋值与读取操作(注意:boolean变量的get方法是is开头!)。
一些只用于本类的辅助性方法可以用private修饰,希望其他类调用的方法用public修饰。

例子:

在这里插入图片描述在这里插入图片描述
运行结果:

在这里插入图片描述

2.继承

继承是面向对象编程的三大特征之一,它让我们更加容易实现对于已有类的扩展、更加容易实现对于现实世界的建模。

继承有两个主要作用:

1.代码复用,更加容易实现类的扩展
2.方便对事务建模

Java中类可以分为三类:

“class类”:使用class定义,没有抽象方法

定义格式:
例如:
class Fu{
属性…
方法…
}
class Zi extends fu{
方法重写…
}
要点:
1.父类也称作超类、基类。子类:派生类等。
2.Java中只有单继承,没有像C++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。
3.Java中类没有多继承,接口有多继承。
4.子类继承父类,可以得到父类的全部属性和方法 (除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法)。
5.如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object。

抽象类:使用abstract class定义

定义格式:
例如:
abstract class Fu{
抽象方法…
}
class Zi extends fu{
抽象方法重写…
方法…
}
要点:
1.有抽象方法的类只能定义成抽象类
2.抽象类不能实例化,即不能用new来实例化抽象类。
3.抽象类可以包含属性、方法、构造方法。但是构造方法不能用来new实例,只能用来被子类调用。
4.抽象类只能用来被继承。
5.抽象方法必须被子类实现。

接口:使用inerface定义,只能有抽象方法静态属性,抽象方法

interface A{
静态属性(A)
抽象方法(A)
}
interface B{
抽象方法(B)
}
interface C implementsA,B{
静态属性(A)
抽象方法(A)
抽象方法(B)
抽象方法(C)
}
要点:
1.访问修饰符:只能是public或默认。
2.接口名:和类名采用相同命名机制。
3.extends:接口可以多继承。
4.常量:接口中的属性只能是常量,总是:public static final 修饰。不写也是。
5.方法:接口中的方法只能是:public abstract。 省略的话,也是public abstract。
6.子类通过implements来实现接口中的规范。
7.子类通过implements来实现接口中的规范一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的。
8.JDK1.8(不含8)之前,接口中只能包含静态常量、抽象方法,不能有普通属性、构造方法、普通方法。
9.JDK1.8(含8)后,接口中包含普通的静态方法、默认方法。


方法的重写override
子类通过重写父类的方法,可以用自身的行为替换父类的行为。方法的重写是实现多态的必要条件。

方法的重写需要符合下面的三个要点:
1.“= =”: 方法名、形参列表相同。
2.“≤”:返回值类型和声明异常类型,子类小于等于父类。
“≥”: 访问权限,子类大于等于父类。

例子:

在这里插入图片描述运行结果:
在这里插入图片描述
关于构造方法和super关键字:

•“super”可以看做是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。
•构造方法不能被继承,子类可以通过super()显式调用父类的构造方法。
•创建子类对象时,编译器会自动调用父类的无参构造方法。
•如果父类没有定义无参构造方法,子类必须在构造方法的第一行代码使用super()显式调用。
•子类默认拥有无参构造方法,如果定义了其他有参构造方法,则无参构造方法失效,所以父类没有 定义无参构造方法,不是指父类没有写无参构造方法。

例子:
在这里插入图片描述运行结果:
在这里插入图片描述
3.多态

多态概念和实现

多态指的是同一个方法调用,由于对象不同可能会有不同的行为。现实生活中,同一个方法,具体实现会完全不同。 比如: 同样是调用人“吃饭”的方法,中国人用筷子吃饭,英国人用刀叉吃饭,印度人用手吃饭。

对象创建格式:

父类名称 对象名=new 子类构造方法
这里还有个口诀:
编译看左边:在编写代码时,只能调用父类方法。
运行看右边:运行结果输出子类方法内容。

多态的要点:

  1. 多态是方法的多态,不是属性的多态(多态与属性无关)。
  2. 多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。
  3. 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。

实例:
在这里插入图片描述
在这里插入图片描述运行结果:
在这里插入图片描述
由此,我们可以看出多态的主要优势是提高了代码的可扩展性,符合开闭原则。但是多态也有弊端,就是无法调用子类特有的功能,比如,我不能使用父类的引用变量调用Dog类特有的seeDoor()方法。

那如果我们就想使用子类特有的功能行不行呢?行!看如的内容:对象的转型。

对象的转型(casting):

父类引用指向子类对象,我们称这个过程为向上转型,属于自动类型转换。
向上转型后的父类引用变量只能调用它编译类型的方法,不能调用它运行时类型的方法。这时,我们就需要进行类型的强制转换,我们称之为向下转型!
在这里插入图片描述在这里插入图片描述
转型异常:
在向下转型过程中,必须将引用变量转成真实的子类类型(运行时类型)否则会出现类型转换异常ClassCastException。
在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值