其他分享
首页 > 其他分享> > 【小白转码】06

【小白转码】06

作者:互联网

第六章

一、封装 encapsulation

1.遵循的原则

随着我们系统越来越复杂,类会越来越多,那么类之间的访问边界必须把握好,面向对象的开发原则要遵循“高内聚、低耦合”,而“高内聚,低耦合”的体现之一:

通俗的讲,封装就是把该隐藏的隐藏起来,该暴露的暴露出来。

 

2.权限修饰符

权限修饰符共有4种,分别为public,protected、缺省、private;权限修饰符可以使得数据在一定范围内可见或者隐藏。

修饰符本类本包其他包子类任意位置
private × × ×
缺省 × ×
protected ×
public

权限修饰符可以修饰:

外部类:public和缺省

成员变量、成员方法、构造器、成员内部类:public,protected,缺省,private

 

3.类的封装

  1. 类的封装的意义:

    • 隐藏类的实现细节

   - 让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里面加入控制逻辑,限制对成员变量的不合理访问。还可以进行数据检查,从而有利于保证对象信息的完整性。
   - 便于修改,提高代码的可维护性。主要说的是隐藏的部分,在内部修改了,如果其对外可以的访问方式不变的话,外部根本感觉不到它的修改。例如:Java8->Java9,String从char[]转为byte[]内部实现,而对外的方法不变,我们使用者根本感觉不到它内部的修改。
  1. 如何进行类的封装?

    • 成员变量(field)私有化

    • 提供标准的get/set方法

 

二、基础 inherit

1.Java中的继承

Java中有父类、子类的概念,类似生活中的父子关系,父类中的一些属性和方法可以被子类继承下来使用,不再需要重复定义。

 

2.继承的特点

2.1 子类会继承父类所有的成员变量和方法

2.2 子类无法直接使用父类的私有成员

2.3 Java只支持单继承

2.4 Java支持多层继承

2.5 一个类可以同时拥有多个子类

 

3.方法的重写 override

当子类继承了父类的某个方法之后,发现这个方法并不能满足子类的实际需求,那么可以通过方法重写,覆盖父类的方法。

3.1 方法重写:

子类中定义与父类中相同的方法,一般方法体不同,用于改造并覆盖父类的方法。

3.2 方法重写的具体要求:

  1. 必须保证父子类之间重写方法的名称相同。

  2. 必须保证父子类之间重写方法的参数列表也完全相同。

  3. 子类方法的返回值类型必须【小于等于】父类方法的返回值类型(小于其实就是是它的子类,例如:Cat< Animal)。

    注意:如果返回值类型是基本数据类型和void,那么必须是相同

  4. 子类方法的权限必须【大于等于】父类方法的权限修饰符。

    注意:public > protected > 缺省 > private

    父类私有方法不能重写

    跨包的父类缺省的方法也不能重写

另外:

静态方法不能被重写,方法重写指的是实例方法重写,静态方法属于类的方法不能被重写,而是隐藏。

final修饰的方法不能被重写

父类private方法不能重写

三、多态polymorphism

1.多态的形式

Java规定父类类型的变量可以接收子类类型的对象,这一点从逻辑上也是说得通的。

父类类型 变量名 = 子类对象;

父类类型:指子类继承的父类类型,或者实现的父接口类型。

所以说继承是多态的前提

//多态的引用形式
Animal a = new Cat();//Cat对象也属于其父类Animal类型。猫也是一个动物。

 

2.多态的表现

多态引用形式的具体表现:编译时类型与运行时类型不一致,编译时看左边的“父类”,运行时看右边的“子类”。

也就是我们常说的:编译看左边,运行看右边。

3.多态的好处

运行时,看“子类”,如果子类重写了方法,一定是执行子类重写的方法;变量引用的子类对象不同,执行的方法就不同,实现动态绑定。代码编写更灵活、功能更强大,可维护性和扩展性更好了。

  1. 提高程序的扩展性(参考引入案例分析)

  2. 降低类与类之间的耦合度(参考引入案例分析)

 

4.向上转型与向下转型

首先,一个对象在new的时候创建是哪个类型的对象,它从头至尾都不会变。即这个对象的运行时类型,本质的类型用于不会变。但是,把这个对象赋值给不同类型的变量时,这些变量的编译时类型却不同。

这个和基本数据类型的转换是不同的。基本数据类型是把数据值copy了一份,相当于有两种数据类型的值。而对象的赋值不会产生两个对象。

1、为什么要类型转换呢?

因为多态,就一定会有把子类对象赋值给父类变量的时候,这个时候,在编译期间,就会出现类型转换的现象。

但是,使用父类变量接收了子类对象之后,我们就不能调用子类拥有,而父类没有的方法了。这也是多态给我们带来的一点"小麻烦"。所以,想要调用子类特有的方法,必须做类型转换,使得编译通过

 

5.如何向上转型与向下转型

向上转型:自动完成

向下转型:(子类类型)父类变量

 

6.instanceof关键字

instanceof关键字用于判断一个对象的运行时类型

为了避免ClassCastException的发生,Java提供了 instanceof 关键字,给引用变量做类型的校验,只要用instanceof判断返回true的,那么强转为该类型就一定是安全的,不会报ClassCastException异常。

格式:

变量/匿名对象 instanceof 数据类型 

那么,哪些instanceof判断会返回true呢?

第六章

一、封装 encapsulation

1.遵循的原则

随着我们系统越来越复杂,类会越来越多,那么类之间的访问边界必须把握好,面向对象的开发原则要遵循“高内聚、低耦合”,而“高内聚,低耦合”的体现之一:

通俗的讲,封装就是把该隐藏的隐藏起来,该暴露的暴露出来。

 

2.权限修饰符

权限修饰符共有4种,分别为public,protected、缺省、private;权限修饰符可以使得数据在一定范围内可见或者隐藏。

修饰符本类本包其他包子类任意位置
private × × ×
缺省 × ×
protected ×
public

权限修饰符可以修饰:

外部类:public和缺省

成员变量、成员方法、构造器、成员内部类:public,protected,缺省,private

 

3.类的封装

  1. 类的封装的意义:

    • 隐藏类的实现细节

   - 让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里面加入控制逻辑,限制对成员变量的不合理访问。还可以进行数据检查,从而有利于保证对象信息的完整性。
   - 便于修改,提高代码的可维护性。主要说的是隐藏的部分,在内部修改了,如果其对外可以的访问方式不变的话,外部根本感觉不到它的修改。例如:Java8->Java9,String从char[]转为byte[]内部实现,而对外的方法不变,我们使用者根本感觉不到它内部的修改。
  1. 如何进行类的封装?

    • 成员变量(field)私有化

    • 提供标准的get/set方法

 

二、基础 inherit

1.Java中的继承

Java中有父类、子类的概念,类似生活中的父子关系,父类中的一些属性和方法可以被子类继承下来使用,不再需要重复定义。

 

2.继承的特点

2.1 子类会继承父类所有的成员变量和方法

2.2 子类无法直接使用父类的私有成员

2.3 Java只支持单继承

2.4 Java支持多层继承

2.5 一个类可以同时拥有多个子类

 

3.方法的重写 override

当子类继承了父类的某个方法之后,发现这个方法并不能满足子类的实际需求,那么可以通过方法重写,覆盖父类的方法。

3.1 方法重写:

子类中定义与父类中相同的方法,一般方法体不同,用于改造并覆盖父类的方法。

3.2 方法重写的具体要求:

  1. 必须保证父子类之间重写方法的名称相同。

  2. 必须保证父子类之间重写方法的参数列表也完全相同。

  3. 子类方法的返回值类型必须【小于等于】父类方法的返回值类型(小于其实就是是它的子类,例如:Cat< Animal)。

    注意:如果返回值类型是基本数据类型和void,那么必须是相同

  4. 子类方法的权限必须【大于等于】父类方法的权限修饰符。

    注意:public > protected > 缺省 > private

    父类私有方法不能重写

    跨包的父类缺省的方法也不能重写

另外:

静态方法不能被重写,方法重写指的是实例方法重写,静态方法属于类的方法不能被重写,而是隐藏。

final修饰的方法不能被重写

父类private方法不能重写

三、多态polymorphism

1.多态的形式

Java规定父类类型的变量可以接收子类类型的对象,这一点从逻辑上也是说得通的。

父类类型 变量名 = 子类对象;

父类类型:指子类继承的父类类型,或者实现的父接口类型。

所以说继承是多态的前提

//多态的引用形式
Animal a = new Cat();//Cat对象也属于其父类Animal类型。猫也是一个动物。

 

2.多态的表现

多态引用形式的具体表现:编译时类型与运行时类型不一致,编译时看左边的“父类”,运行时看右边的“子类”。

也就是我们常说的:编译看左边,运行看右边。

3.多态的好处

运行时,看“子类”,如果子类重写了方法,一定是执行子类重写的方法;变量引用的子类对象不同,执行的方法就不同,实现动态绑定。代码编写更灵活、功能更强大,可维护性和扩展性更好了。

  1. 提高程序的扩展性(参考引入案例分析)

  2. 降低类与类之间的耦合度(参考引入案例分析)

 

4.向上转型与向下转型

首先,一个对象在new的时候创建是哪个类型的对象,它从头至尾都不会变。即这个对象的运行时类型,本质的类型用于不会变。但是,把这个对象赋值给不同类型的变量时,这些变量的编译时类型却不同。

这个和基本数据类型的转换是不同的。基本数据类型是把数据值copy了一份,相当于有两种数据类型的值。而对象的赋值不会产生两个对象。

1、为什么要类型转换呢?

因为多态,就一定会有把子类对象赋值给父类变量的时候,这个时候,在编译期间,就会出现类型转换的现象。

但是,使用父类变量接收了子类对象之后,我们就不能调用子类拥有,而父类没有的方法了。这也是多态给我们带来的一点"小麻烦"。所以,想要调用子类特有的方法,必须做类型转换,使得编译通过

 

5.如何向上转型与向下转型

向上转型:自动完成

向下转型:(子类类型)父类变量

 

6.instanceof关键字

instanceof关键字用于判断一个对象的运行时类型

为了避免ClassCastException的发生,Java提供了 instanceof 关键字,给引用变量做类型的校验,只要用instanceof判断返回true的,那么强转为该类型就一定是安全的,不会报ClassCastException异常。

格式:

变量/匿名对象 instanceof 数据类型 

那么,哪些instanceof判断会返回true呢?

标签:重写,06,变量,转码,子类,小白,类型,父类,方法
来源: https://www.cnblogs.com/gezigkd/p/16061891.html