Java面向对象的三大特征

Java面向对象的三大特征

特征一:封装(encapsulation)

​ 1、含义:将一条至多条语句封装到一个容器中,封装的内容有属性和方法,这容器被称为类。

​ 2、容器分为三类:属性、方法、类。【个人的理解】

​ 1)对属性信息的封装语法格式

​ private 数据类型 变量名;

​ 2)对部分代码块的封装:

​ 访问修饰符 返回值类型 方法名() {

​ 一条或者多条代码语句;

​ }

​ 3)对整体代码块的封装

​ 语法格式:

​ 访问修饰符 class 类名 {

​ 一个属性或者多个属性;

​ 一个方法或者多个方法;

​ }

​ 3、特点

​ 1)结构化。

​ 2)重用性。

​ 3)安全性。

​ 4)小提示:一个类中只能定义一个public关键字修饰的外部类。

特征二:继承(extends)

​ 1、含义:子承父业,在已存在的基类上去扩展新的类,只支持单继承

​ 2、语法格式:

​ class Student extends People {

​ 一个属性或者多个属性;

​ 一个方法或者多个方法;

​ }

​ 3、继承的两种方式:

​ 1)第一种:链式继承,一对一的关系。

​ A类继承B类,B类继承C类,C类继承D类,D类继承F,…

​ 如图:

在这里插入图片描述

​ 2)第二种:树形继承,一(父类)对多(子类)的关系。

​ B1类继承A类,B2类继承A类;

​ C1类继承B1类,C2类继承B1类,C3类继承B1类;

​ D1类继承B2类,D2类继承B2类,D3类继承B2类。

​ E1类继承C1类,E2类继承C1类;

​ F1类继承D3类,F2类继承D3类;

​ …

​ 如图:

在这里插入图片描述

​ 注:越往上层的类级别越高,也代表属性和方法越少。

​ 4、类与类之间的继承特点:

​ 1)只能继承父类的实例属性和实例方法。【对象级别的】

​ 2)带有static、final、private关键字修饰的不会被子类所继承。

​ 3)子类在初始化时,会优先初始化父类,在没有继承的情况下,所有的类默认会继承 Object类,此类在java.lang包下。

​ 4)在没有定义有参构造情况下,系统会自动添加一个隐式的无参构造器。

​ 5)在定义了有参构造器情况下,系统不会添加一个隐式的无参构造器、

​ 6)this代表当前对象,super代表父类对象。

​ 7)this关键字只能在本类作用域有效。

​ 8)this()代表调用子类无参构造方法,super()代表调用父类无参构造方法。

​ 9)子类当中有该调用的方法就调用子类中的方法,若没有则找从父类中去找调用的方法。

​ 10)this()有参或者无参 和 super()有参或者无参 只能出现在构造器中的第一行并且二者不能同时出现

​ 11)子类重写父类的方法不能抛出大于父类被重写的方法所抛出的异常。

​ 12)父类不能调用子类特有的方法,而子类可以调用父类的普通方法(实例方法、属性)。

​ 13)提高了代码的重用性。

​ 14)耦合度较高。【类与类之间依赖或者接口与接口之间的依赖】。

​ 15)为多态机制作做了一个铺垫。

​ 5、继承初始化的顺序

​ 第一步:子类的静态代码块

​ 第二步:父类的静态代码块

​ 第三步:父类构造代码块

​ 第四步:父类的构造方法

​ 第五步:子类的构造代码块

​ 第六步:子类的构造方法。

​ 6、方法重载(Overload) 和 方法重写(Overwrite)。

​ 1、方法重载:在同一个类下,功能相似,保持方法名相同。

​ 一个相同:方法名。

​ 四个可不相同:访问修饰符、返回值类型、参数列表、方法体(方法内部的语句)。

​ 1.1、例如:System.out.println(); 输出语句。

​ 1)输出语句中的println()方法可以输出多种类型的数据:、float、double、boolean、Object对象数据。

​ 2)功能:都是输出(打印)数据到控制台。

​ 3)调用多个方法名相同时,此时就如同只在调用一个方法似的。

​ 小提示:重载机制起初是从构造方法开始的。

​ 2、方法重写:在继承情况下,父类已有的需求已经满足不了子类的需求时,此时就等重写父类中的普通方法。

​ 三个相同:返回值类型、方法名、参数列表。

​ 二个可不相同:访问修饰符 和 方法体(方法内部的语句),但访问修饰符不能低于父类的访问权限。

​ 用途:扩大父类不能完成的功能 或者 完成子类特有的功能。【在子类满足不了需求时,才重写的】

​ 7、小提示:

​ 1)在继承之间,需检测以下是否符合:A is a B的逻辑关系。例如:鸟儿类(子类) 是 一个 动物类【属于】(父类)、学生或老师类(子类)是【属于】一个人类(父类)。。

​ 2)接口可以弥补单继承的缺陷,一个类可以实现多个接口,而一个类只能继承一个类,但接口与接口之间也只支持单继承。

​ 3)类与类之间只存在单向继承的关系,而类与接口之间存在多继承(实现)的关系。

​ 4)不存在类与接口之间的继承。

​ 5)类实现接口可以把它看做成类继承接口中的实例方法,需要重写接口中的方法。

​ 6)接口与接口之间的继承类似于类与类之间的继承。

​ 7)常说到的实体类不是抽象类,而指的是一个普通的类。【个人的理解,由于实体类中不能有抽象方法】

特征三:多态(polymorphism)

​ 1、含义:一个方法的多种形态。(某个行为的多种状态)

​ 2、两种多态机制:

​ 第一种:编译时的多态机制,通过重载(override)机制来加以实现。

​ 第二种:运行时的多态机制,通过重写(overwrite)机制来加以实现。

​ 小提示:编译时看等于号左边,运行时看等于号右边,调用编译时和运行时的公共部分的方法。

​ 3、转型语法:

​ 例如:假设 Student类继承了 People 类。

​ 1)向上转型:子类型转父类型。

​ 语法:父类型 变量名 = new 子类型构造器();

​ People people= new Student();

​ 2)向下转型:父类类型间接转子类型。

​ 语法:子类型 变量名 = (子类型)已向上转型的父类型变量名;

​ Student xiaoMing = (Student)people;

​ 3)小提示:

​ 提示一:在向上转型的时候,建议 people对象是不是Student类的对象,使用 instancof运算符来判断,返回值类型是boolean类型【true:是;false:不是】。

​ 例如:boolean isStudentObject = people instanceof Student;

​ 提示二、向上转型只能调用父类在子类重写的方法。

​ 提示三、向下转型可以使用子类特有的属性和方法。

​ 4、使用多态机制的前提下需满足以下三点

​ 1)类之间有继承关系或者类实现了接口。

​ 2)子类需要重写子类的方法,实现类需要实现接口中的方法。

​ 3)父类引用指向子类对象。

​ 5、小提示:

​ 1)定义抽象方法而不在实体类中重写则毫无意义的存在,没有任何存在的价值。

​ 2)在API帮助文档当中,有些抽象方法或者protected修饰的方法需要程序员继承该类并进行手动重写。

​ 3)带有protected关键字修饰的属性和方法只能在同包或者不同子类下才能使用。

补充点:匿名类对象

​ 匿名类对象:创建一个不带变量名的对象,只能使用一次。在学习中可以会遇到 new抽象名、new接口名情况。

​ 1、new抽象名

​ 1)定义了一个抽象类:abstract class A {}

​ 2)new接口名

​ new A(){

​ 重写抽象A类中所有的的抽象方法;【有就重写,没有就无需重写】

​ };

​ 2、new接口名

​ 1)定义了一个接口:interface B{}

​ 2)new了一个匿名对象:

​ new B(){

​ 重写接口中所有的抽象方法;【有就重写,没有就无需重写】

​ };

​ 总结:new抽象名和new接口名其实是new了一个继承/实现它们的子类,继承关系是隐约式的,这个子类由虚拟机自动帮你生成,也是隐约式的,但是你得使用指定的格式并且需要手动重写父类所有的抽象方法。【个人的理解】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值