JavaSE_第八章:三大特性

本文详细介绍了JavaSE的三大特性——封装、继承和多态。封装通过private修饰符隐藏对象细节,使用set/get方法进行数据访问;继承实现代码复用和扩展,子类可重写父类方法;多态则表现为父类引用指向子类对象,实现不同形态。文章还涉及访问修饰符、方法重写、构造方法、super关键字、this与super的使用,以及装箱与拆箱的概念。
摘要由CSDN通过智能技术生成

JavaSE学习历程

第一章:Java初识
第二章:Java语言基础
第三章:选择结构与分支结构
第四章:循环结构
第五章:方法/函数
第六章:数组
第七章:面向对象

第八章:三大特性

1 封装

1.1 封装

概念:尽可能隐藏对象的内部实现细节,控制对象的修改及访问权限
访问修饰符:private—>(可将属性修饰为私有,仅本类可见)

1.2 公共访问方法

set/get 方法,以访问的形式,进而完成赋值与取值操作.
get/set方法是外界访问私有属性的唯一方法

  • set方法:带参数,无返回值.—>赋值方法
  • get方法:无参数,有返回值.—>取值方法

1.3 过滤有效数据

通过再公共访问方法的内部,添加逻辑判断,进而过滤掉非法数据,以保证数据安全.

1.4 封装总结

1.通过private修饰符,让成员变量私有化;
2.通过set/get方法访问私有成员变量(属性);
3.在公共访问方法内部添加逻辑判断,达到检测和过滤数据的目的.

2 访问修饰符

本类同包非同包子类其他
private×××
default××
protected×
public

访问修饰符作用范围

  • 访问修饰符除了放在属性前,还有其它什么位置:
  • 通过修饰符来控制类、属性和方法的访问权限和其他功能,通常放在语句的最前端.

3 继承

3.1 继承

程序中的继承,是类与类之间特征和行文的一种赠与或获得
在一组相同或类似的类中,抽取出共性的特征和行为,定义在父类中,实现重用

语法:class 子类 extends 父类{} //定义子类时,显示继承父类
应用:产生继承关系之后,子类可以使用父类中的属性和方法,也可定义子类独有的属性和方法.
好处:既提高代码的复用性,又提高代码的可扩展性.
注:Java为单继承,一个类只能有一个直接父类,但可以多级继承,属性和方法逐级叠加.

3.2 不可继承

构造方法:

  • 类中的构造方法,只负责创建本类,不可继承.

private修饰的属性和方法:

  • 访问修饰符的一种,仅本类可见.

父子类不在同一个package包中,default修饰的属性和方法:

  • 访问修饰符的一种,仅同包可见.

4 方法重写/覆盖(Override)

4.1 方法的重写

问题:当父类提供的方法无法满足子类需求时,可在子类中定义和父类相同的方法进行重写(Override).

4.2 方法重写原则与执行

方法重写原则:

  • 方法名称、参数列表必须与父类相同。
  • 返回值类型与父类或其子类(返回值类型的子类)一样
  • 访问修饰符可与父类相同或是比父类更宽泛。

方法重写执行:

  • 子类重写父类方法后,调用时优先执行子类重写后的方法。

4.3 super关键字

  • 在子类中,可直接访问从父类继承到的属性和方法,但如果父子类的属性或方法存在重名(属性遮蔽、方法重写)时,需要加以区分,才可专项访问.
  • super关键字可在子类中访问父类的方法.

super()调用父类无参构造方法时,若没有显示书写,则隐式存在于子类构造方法的首行.

4.4 继承中的对象创建

  • 在具有继承关系的对象创建中,构建子类对象会优先构建父类对象.
  • 有父类的共性内容,叠加子类独有内容,组合成完整的子类对象

4.5 继承后的对象构建过程

在这里插入图片描述

构建子类对象时,先构建父类对象

4.6 this与super

相同点:

使用在构造方法中,都要求在首行,故在构造方法中两个关键字只能存在一个

5 多态

5.1 生活中的多态

在这里插入图片描述

生活中多态是指"客观事物在人脑中的主观反应".
主观意识上的类别与客观存在的对象具有"is a"关系时,即形成多态.

5.2 程序中的多态

概念: 父类引用指向子类对象,从而产生多种形态
父类引用(引用类型)<—Animal a = new Dog();—>子类对象(对象类型)
二者具有间接或直接的继承关系时,父类引用可指向子类对象,即形成多态.
父类引用仅可调用父类所声明的属性和方法,不可调用子类独有的属性和方法.但父类引用可通过类型强转实现调用子类的独有的方法.

5.3 多态中的方法重写

多态中的方法重写依旧遵循重写原则,如果子类重写了父类中的方法,执行子类中重写的方法,否则执行父类的方法.

5.4 多态的应用

方法得重载可以解决接收不同对象参数得问题,但其缺点也比较明显

  • 随着子类的增加,类需要继续提供大量的方法重载,多次修改并重新编译源文件.
  • 每一个重载的方法与某一种具体类型形成了密不可分的关系,耦合太高.

多态使用场景一:使用父类作为方法形参实现多态,使方法参数的类型更为宽泛.
多态使用场景二:使用父类作为方法的返回值实现多态,是方法可以返回不同的子类对象.

5.5 多态的静态和动态实现

动态绑定:即为重写/覆盖,方法的重写

动态绑定也叫后期绑定,在运行时,虚拟机根据具体对象实例的类型进行绑定,或者说是只有对象在虚拟机中运行创建了之后,才能确定方法属于哪一个对象实例的

  • 根据实际对象是什么,就去找相应对象方法去执行。
  • 动态绑定是在运行时才会执行(例如重写的方法)。

静态绑定:即为重载,方法的重载

一个方法的参数在编译阶段常被静态地绑定,它是根据参数列表的不同来区分不同的函数,通过编辑之后会变成两个不同的函数

  • 根据类型找相应的属性或者静态变量。
  • 静态绑定是在编译时执行(如成员变量,静态方法)。

6 装箱与拆箱

6.1 向上转型(装箱)

Animal a = new Dog();
父类引用中保存真实子类对象–>称为向上转型(多态核心概念)
注意:只可调用父类中声明的属性和方法.

6.2 向下转型(拆箱)

Animal a = new Dog(); Dog dog = (Dog)a;
将父类引用的真实子类对象,强制转回子类本身类型,称为向下转型
注意:只有转回子类真实类型才可调用子类独有的属性与方法.

6.3 类型转换异常

java.lang.ClassCastException:向下转型时,如果父类引用的子类对象类型和目标类型不匹配,则会发生类型转换异常.
解决方法:向下转型前,应判断引用中的对象真实类型,保证类型转换的正确性。
关键字:instanceof
语法:父类引用 instanceof 目标类型 //返回boolean类型结果

public static void menu() {

		Animal animal = new Animal();
		Scanner input = new Scanner(System.in);
		System.out.println("====欢迎来到宠物店====");
		System.out.println("请输入您需要购买的宠物:1.狗、2.猫、3.蛇、4.鸟");
		int choose = input.nextInt();
		
		// 根据返回的动物类型,选择不同的动物
		animal.buy(sell(choose));
		
		animal = sell(choose);
		if (animal instanceof Dog) {
			Dog d = (Dog) animal;
			d.run();
		} else if (animal instanceof Cat) {
			Cat c = (Cat) animal;
			c.play();
		} else if (animal instanceof Snake) {
			Snake s = (Snake) animal;
			s.climb();
		} else if (animal instanceof Bird) {
			Bird b = (Bird) animal;
			b.flay();
		}

	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值