码迷,mamicode.com
首页 > 其他好文 > 详细

暑假自学(20)

时间:2020-07-26 01:47:46      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:声明   数值   变量声明   暑假   new   extends   比较   类类型   boolean   

instanceof:
有了对象的多态性以后,内存中实际加载了子类持有的属性和方法,
但由于变量声明为父类类型,导致编译时只能调用父类的属性和方法。子类持有的属性和方法不能调用。
要想调用,需要使用向下转型:使用强制类型转换符
Person p1 = new Man();//Person类型
Man m1 = (Man)p1;//类型转换
但是:Woman m2 = (Woman) m1;//失败
a instanceof A:判断对象a是否是类A的实例。如果是,返回true,不是返回false
由于类型转换时可能会出现异常,所以利用instanceof在转换前进行判断,true则进行转换,反之不转换
如果a instanceof A返回true B是A的父类 则a instanceof B也返回true。

== 运算符
1.用于基本数据类型的数值比较
2.用于引用数据变量的地址值比较(是否指向同一个堆空间中的实体)
equals:
Object类中equals的定义
public boolean equals(Object obj){
return (this == obj);
}
像String,File,包装类等,都重写了equals()方法
重写以后,比较的是内容而不是地址。
重写规则:比较内容是否相同
public boolean equals(Object obj){
if(this == obj){
return true;//如果二者地址相同,则肯定相同
}
if(this instanceof obj){
if(this.age == obj.age&&this.name.equals(obj.name))
return true;
}
return false;
}

 

 

 

多态性测试代码

public class text {
public static void main(String[] args) {
Sub s = new Sub();
System.out.println(s.count);
s.display();
Base b = s;//附地址
System.out.println(b == s);//地址相同返回true
System.out.println(b.count);
b.display();//此时b与s指向堆中同一个对象
}
}
class Base{
int count = 10;
public void display() {
System.out.println(this.count);
}
}
class Sub extends Base{
int count = 20;

public void display() {
System.out.println(this.count);
}
}

暑假自学(20)

标签:声明   数值   变量声明   暑假   new   extends   比较   类类型   boolean   

原文地址:https://www.cnblogs.com/buxiang-Christina/p/13378519.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!