面向对象的三个特性:封装、继承、多态

面向对象的三个特性:封装、继承、多态

第一个特性:封装

一、概念
封装:给类设置一个边界,用以对内部的数据起到一定的保护作用。
封装的实现:①属性私有

private 属性类型   变量名=值;

②对属性提供公开的get、set方法

private 关键字/访问修饰符:私有,代表只能在本类内部使用。
public 关键字/访问修饰符:公开、代表在任何地方都可以使用。

get:获取属性的值	
	public 返回值类型 getName(){
	//返回值类型同属性类型一值,没有参数
	return this.name;
}
set:设置/修改 属性的值
	public viod setName(Sting name){
	//返回值类型viod 参数类型的属性类型
	this.name=name;
}

案例:

在这里插入图片描述

二、封装的要求
①对所有属性私有化,private修饰。
②对私有化属性提供公开的get/set方法

第二个特性:继承

一、继承
1、继承体现的是类之间的 is-a 关系
A is-a B 关系成立,则称A继承B
A 继承 B
A就是子类 B就是父类
子类 extends 父类

语法:
class 子类  extends  父类{}

2、通过继承机制,子类可以直接使用父类的属性和方法。

3、继承体现了的类之间本身的一种“is-a”关系,不能强制使用继承

二、继承的好处
1、继承体现了代码的可复用性
注意:一个父类可以同时具有多个子类,每一个子类通过继承关系都可以直接使用父类中的属性和方法。
2、继承体现了代码的可扩展性
注意:子类可以定义自身独有的属性和方法

三、方法的覆盖(Override,重写)
1、概念:在子类中定义和父类相同的方法

2、方法覆盖的要求
①子类方法的方法名、形参列表、返回值类型和父类相同
②子类的访问修饰符和父类的相同或是比父类的更宽
3、使用:子类引用 . 方法名(实参);//优先使用子类覆盖的方法
4、注意:
(1)子类中的方法 方法名、形参泪飙和父类相同,但返回值类型不同,则不能构成方法覆盖,编译报错。

(2)子类的方法:方法名、返回值类型和父类形同;但形参列表和父类不同,则不能构成方法覆盖:但是编译能通过,因为构成了昂发的重载,运行是根据给定的
实参来决定调用父类大方法还是子类的方法。

四、父类的来源
1、根据每一个子类定一个共同的类别,决定父类类名
2、父类中的属性和方法抽取每一个子类的共性
3、父类中的信息是一般的、抽象的;子类中的信息是特殊的、具体的。
4、抽取父类时,尽可能的就近提取。

五、Java类之间继承的特点
(1) 继承特点:Java类之间是单继承,即一个类只能有一 个直接父类、但是可以多级继承,即一个类可以有多个 间接父类
(2) Java类之间的单继承体现了Java语言的简单性

六、super的应用

  1. 第一种应用: super.
  1. super. 应用在子类的成员方法或是构造方法中, 访问父类的属性或是成员方法
    (2) super. 属性名 代表 访问父类的属性 super.成员方法名(实参); 代表访问父类的成员方法 注意:super. 没有位置的要求(应用在子类的方法 中)
  1. 第二种应用:super()
    (1) super() 应用在子类的构造方法中的第一行有效 语句,指示创建子类对象时,jvm默认创建一个父 类对象时,具体利用父类的哪一个构造方法完成父 类对象的创建
    (2) super();代表jvm默认创建父类对象时利用无参 数的构造方法完成父类对象的创建 super(实参); 代表jvm默认创建父类对象时利用对应 有参数构造方法完成父类对象的创建
    (3) 如果子类的构造方法中没有使用 super()/super(实参),则jvm会默认在子类构造方法 中的第一行添加 super();代表jvm创建父类对象时,默认使用父类的无参数 的构造方法
    (4) 一个子类构造方法中不能同时使用 this()/this(实 参) 和 super()/super(实参);而且子类的一个构造 方法第一行一旦使用了this()/this(实参),jvm不会再 添加默认的super()
    (5) 如果子类的构造方法的第一行使用了 this()/this(实参),则jvm会放弃在当前构造方法中查 找所需要的super(),根据this()/this(实参)调用的构 造方法中的第一行查找super()

第三个特性:多态

一、多态的概念

1.多态:父类型的应用可以指向不同的子类型的对象

语法:
父类型 引用名 =new 子类名();
Animal a=new Dag();

2.以父类型引用调用属性和方法,只能调用父类中定 义的属性和方法
3.运行的时候,jvm会自动的检测子类是否覆盖父类 中方法,如果覆盖则执行子类覆盖后的方法,否则 直接执行父类中方法

二、引用之间的转换
1、 父类型的引用 赋值 给子类型的引用,需要强制类型 转换 大类型 小类型

语法:子类型类名 引用名 = (子类型类名)父类型 引用名; 
Dog d = (Dog)a;

结果:编译一定,运行是需要检测实际存储的对 象类型和要转换的类型是否一致:
a. 实际存储的对象类型 和转换类型 一致,编译通 过,运行也通过 Animal a = new Dog();// 实际存储的对象类型为 Dog Dog d = (Dog)a;// 要转换的类型 也为Dog。
b. 实际存储的对象类型和要转换的类型不一致,编 译通过,但是运行报错,报错的错误为: java.lang.ClassCastException(类型转换异常)
Animal a = new Cat(); // 实际存储的对象类型为Cat
Dog d = (Dog)a; // 要转换的类型为:Dog

2、 子类型的引用 赋值给 父类型的引用 ,直接赋值即 可,体现多态
(小类型) 大类型
(1) 语法:父类类名 引用名 = 子类型的引用;
(2) 案例:Dog d = new Dog(); Animal a = d;
以上两种引用赋值双方存在继承关系

3、 转换的双方没有继承关系,则不能相互转换,强制 类型转换也不可以 Animal a = new Dog(); Person p = (Person)a;

三、instanceof 的应用
1、语法:引用名 instanceof 类名
2、结果:类型为boolean,true或是false
3、含义:将引用名中存储的实际对象 和 instanceof 后 面的类名对应的类型相比,如果实际对类型类型兼
容后面的类型,则结果true;如果不兼容结果为 false

四、多态的开发实际应用

1、 多态应用在数组上,数组的数据类型为父类型:本 类型+所有的子类型的对象都可以作为元素进行存储 
 2、多态应用在形式参数上,形式参数为父类型:本类 型+所有子类型的对象都可以作为 实际参数进行传 递
 3、 多态应用在返回值上,返回值类型为父类型:本类 型+所有子类型的对象都可以作为返回值返回
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值