javase第十二天学习:基本语法(多态+object+包装类)

一、多态的补充内容

1.instanceof运算符

why:运算符可以判断对象a是否为类A的实例,是返回true,不是返回false。能否成功即看(new的对象)

Person a = new Man()//此时a仍是Man的实际例子,只不过a的地址值付给了Person类型的引用,并且a只能调用person的方法和类以及重写了的子类Man的方法。

2.多态性的介绍

在对象多态化后,内存加载了子类特有的属性和方法,但由于引用是父类的引用,导致编译时,只能调用父类的方法和属性,子类特有的不能调用,多态是运行时行为即在运行时调用的方法为子类重写方法。

Person a = new Man();该父类引用被赋值为子类的地址,相当于多态。

如何调用子类特有的属性,只能进行强制转换

Man m1 = a;//执行不成功,此时父类的引用想直接赋给子类的引用,需要强制转换,上面是向上,下面是向下转换。即需要有 Man m1 = (Man) a;

3.多态性例子的说明

例子:

person p = new woman();Man s= (man) p;编译通过,运行不通过。
object obj = new woman();peroson p =(person)obj;编译通过运行通过
person p = new perso();man m =(man) p;编译通过运行不通过。

在多态中,子类的方法会覆盖父类的方法,但是子类的属性和父类的属性会共存。

例子:

Man a = new Man() ; person b =a;//a和b的地址类型都是man类型。即在多态的过程中,一开始new的类型已经确定,后面多态也不会改变地址类型
person a = new man(); man b =(man)a;//a和b的地址此时也都是man类型,即确认new的地址类型已经定经过多态强制类型装换也都不会变。理解:person a相当于person类的引用,即父类的引用可以保存子类new的地址,并且只能调用父类的属性和重写方法。

Man a = new man()即可以在a中改变子类的属性,而在多态person a = new man(),除了强制转回man无法改变子类属性。

注意:public void add(int a,int[] arr)和pulbic void add(int a,int b,int c)中方法的重载在传入1,2,3时优先调用后一个函数,因为有确定参数的先调用。

二、object类的使用

1.object类简介

object类是所有类的根父类,即java.lang.object

2.object类提供的方法

finalize方法:在对象被垃圾回收之前,需要对象主动调用finalize方法,然后告诉垃圾回收器应该执行的方法

equals() toString()

3.equals方法

简介==运算符

基本数据类型和引用数据类型
基本数据类型的判断:,数值是否相等,不需类型相同,适用于自动类型提升。1010.0 true; (char c = 10) ==10 true;注意:char类型本身即可定义ascii码即10来代表字符
引用数据类型的判断:,对象的地址值是否相同即两个引用是否指向同一个对象实体。String a = "aaa"和string b =new “aaa”; ab false 比较的是地址值。但是若System.out.println(a,b)两者都是aaa因为背后调用了toString

equals方法的使用:

equals相当于类继承object获得的属性,即相当于方法,用于判断两个对象的地址,背后逻辑运用==是否相等。即perons1.equals(person2) true;
equals一般都会重写即想String,Date,File等类都对object下的equals方法进行了重写,比较实体内容是否相同
自定义类的重写:判断地址是否相同,判断对象是否为当前对象类型,强转输入对象,判断实体内容。

==和equals方法的区别

String == String 比较的地址 String.equals(String)此时重写比较的是实体内容
String A=“bb” ;String B = “bb”;a==b结果是true,比较的仍是地址,但是由于常量池中已有的会直接赋值,故两者地址相同
String A = new String(“bb”);String B = “bb”;此时结果是false,因为new了一个新的即新地址。

4.toString()方法的使用

object默认方法,即输出对象时默认调用toString();

System.out.println(cust1)//输出为地址。System.out.println(Str)//输出为具体值,即Sring改写了toString,在println时会调用类的toString方法。

String,Date,File都重写了object类的toStrong方法,使得输出不是地址,而是具体的实体内容 ,自定义类重写toString方法。注意:println(对象),默认调用对象.toString

调用过程:println(object x ) -----》return x.toString()

三、包装类的使用

1.单元测试的使用

直接声明@Test注解,然后引入包以及调好参数,声明好单元测试方法后双击方法名即可运行

2.包装类的使用

why:因为基本数据类型并没有体现类的思想,目的为了给每一种数据类型提供包装类

what:java提供了八中数据类型的包装类,基本数据类型具有类的特征。

3.包装类的转换

基本数据类型转化为包装类

Integer in1 = new Interger(10);//(“123”)可以直接抽取
Float f1 = new Float(“12.3”)//(12.3f)可以直接抽取
其他的均可

包装类转化为基本数据类型

调用 …Value()
int i1 = ini.intValue();

自动组装和自动拆卸

Integer num1 = 10;//自动装箱
int num3 =num1;//自动拆箱

基本数据类型、包装型转换到String类型

String str1 = num1 +“”
String str1 = String.valueof(12.3f)//基本数据类型到String类型
int num2=Integer.parseInt(Str1);//反过来转换需要调用parseInt方法

例子:

object o1=true?new Integer(1):new Double(2.0)
System.out.println(o1)
结果为1不对,因为整型与double型需要向上转换
结果为地址不对,因为相当于多态,重写了toString
故正确结果应该为1.0

例子:

Integer m =1;Integer n =1;
m==n//true,因为Integer类会提前加载-128-127的数,相同的直接指向地址即可,故m和n的地址相同
interger x =128;Integer y = 128;
x==y//fale,因为此时并未加载,两者都需新加载进去故都产生新地址。

自动装箱和自动拆箱即在函数调用时会产生,在=时会产生,而在<比较时并不会自动拆箱装箱。

四、多态性理解

1.Peron a = new Man()//相当于所有的东西都仍然是Man的,只不过用person类的引用保存了一下,又因为在编译过程中看到是person类了,故只能调用person的属性和方法,但执行过程中,发现man中有重写的方法,故执行的也是man中重写的方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值