面向对象的特征之三:多态性

一、多态性

1.理解多态性:可以理解为一个事物的多种形态。

2.何为多态性:

对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)

3.多态的使用:虚拟方法调用

        有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。

        总结:编译,看左边;运行,看右边。

4.多态性的使用前提:①类的继承关系 ②方法的重写

5.对象的多态性,只适用于方法,不适用于属性(编译和运行都看左边)

多态的使用:当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法–--虚拟方法调用

6.instanceof操作符

二、object类结构的解刨

java.lang.object类

1.0bject类是所有Java类的根父类

2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.0bject类

3.0bject类中的功能(属性、方法)就具有通用性。

属性:无

方法:toString()、equals()、getClass()hashCode()、clone()、finalize()

4. object类只声明了一个空参的构造器

面试题:

一、==的使用

==:运算符

1、可以使用在基本数据类型和引用数据类型变量中

2、如果比较的是基本数据类型变量:比较两个变量保存的数据是否一样(不一定数据类型类型一样)

        如果比较的是引用数据类型变量:比较的是对象的地址值是否相同

二、equals()方法的使用

1、是一个方法,而得运算符

2、适用于引用数据类型

3.object类中equals()的定义:
        public boolean equals(Object obi){
                return (this ==obi);
        }
说明:0bject类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体

4、像String、Date、File、包装类等都重写了0bject类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。

5.通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,我们就需要对Object类中的equals()进行重写

三、object 类中toString()的使用

1.当我们输出一个对象的引用时,实际上就是调用当前对象的toString()

2. object类中toString()的定义:

                public string toString() {

                        return getclass( ).getName() +“@" + Integer.toHexString(hashCode());

3.像String、Date、File、包装类等都重写了Object类中的toString()方法。

        使得在调用对象的toString()时,返回""实体内容"信息.

4.自定义类也可以重写toString]()方法,当调用此方法时,返回对象的"实体内容"

三、java中的JUnit单元测试

步骤:

1.选中当前工程–右键选择: build path - add libraries - JUnit 4 -下一步

2.创建Java类,进行单元测试。此时的Java类要求:此类是public的◎此类提供公共的无参的构造器

3.此类中声明单元测试方法。此时的单元测试方法。方法的权限是public,没有返回值,没有形参

4.此单元测试方法上需要声明注解:@Test,并在单元测试类中导入。import org.junit.Test;

5.声明好单元测试方法以后,就可以在方法体内测试相关的代码。

6.写完代码以后,左键双击单元测试方法名,右键:run as - JUnit TestI

说明:

1.如果执行结果没有任何异常绿条

2.如里执行结果里出现导常,红条

四、包装类的使用

1.java提供了8种基本数据类型对应的包装类,使得基本数据类型的变量具有类的特性

基本数据类型包装类型
byte   java.lang.Byte(父类Number)
short  java.lang.Short(父类Number)
int                java.lang.Integer(父类Number
longjava.lang.Long(父类Number)
floatjava.lang.Float(父类Number)
double java.lang.Double(父类Number)
boolean java.lang.Boolean(父类Object)
char java.lang.Character(父类Object)

2.掌握的:基本数据类型、包装类、String三者之间的相互转换
 

#自动装箱和自动拆箱

//包装类--->基本数据类型:调用包装类的xxx的xxxValue()

//基本数据类型--->包装类:调用包装类的构造器
//基本数据类型、包装类--->String类型:调用Sting重载的valueOf(xxx xxx)

@Test
	public void test3() {
		int num1 = 1;
		//方式一:连接运算
		String str1 = num1 + " ";
		//方式二:调用string的valueOf()
		float f1 = 2.4f;
		String str2 = String.valueOf(f1);
		
	}

 //String类型--->  基本数据类型、包装类:调用包装类的ParseXxx()

        注意:转换时,可能会报NumberFormException

面试问题:

1.如何实现向下转型?需要注意什么问题?如何解决此问题?
        Person p = new Man();
        使用强转符:()
        Man m = (Man)p;                注:强转不成功时出现ClassCastException异常

使用instanceof在进行向下转型前判断。if (a instanceof A){
                                                                        Man m = (A)a;
                                                                }

instanceof:左边是对象,右边是一个类型,判断它是否可以进行强(判断对象a是否为A的引用)

2、对多态性的理解

①实现代码的通用性

②object类中定义的public boolean equals(Object obj){}

JDBC:使用Java程序操作(获取数据库连接、CRUD)数据库(MySQL、Oracle、DB2、sql server)

③抽象类、接口的使用肯定体现了多态性。(抽象类、接口不能实例化)

        

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值