多态:统一行为 多种形式 |
* 1 .继承或者实现 |
* 2 .放法的重写 |
* 3 .父类引用指向对象: 对父类进行声明,指向子类的对象(方法) |
* |
* 多态的作用:提高代码的维护性 和扩展性 |
* 维护性 :继承 扩展性:父类具有子类的共性,子类对象通过父类 |
* 来实现,即向上转型,当子类增加时,就不用重新声明,直接通过父类实现子类的方法 |
* |
* |
* 父类类型 变量名 = new 子类对象; |
* 变量名.方法名; |
* public interface Animal{ |
* public void eat(){ |
* |
* } |
* |
* public void sleep(){ |
* |
* } |
* |
* } |
* |
* lang 包不用导包 |
* object(翻译过来:类) 是所有类的父类,若该类有父类,那么就是爷爷类还是可以使用object的方法 |
* 返回对象的字符串形式 |
* 类方法:tostring |
* equals(object obj) |
* 类包同时创:改包名 ,取类名 |
* system :输出的是地址 即object类中的toString:地址 我们有时想看数组,集合元素 就需要重写类中的tostring 即[ 1 , 2 , 3 , 4 ] |
* 当类中 有私有变量,重写时生成的都是 [成员变量 +变量值...] 或者改成我们想看到的形式 |
* objects 是工具类,里面是静态方法 当此对象为空时,object是没法比较的,空指针异常,但objects 提供了 |
* public static boolean equals(Object a, Object b) { |
return (a == b) || (a != null && a.equals(b)); |
} 若a! null 且a的内容和b相同 才为 true |
* to string |
* |
* equals 可以比较任何类型 |
* stu1=stu2;若不重写,比较的是俩对象的地址,重写后比较的是内容 |
* |
* @Override |
public int hashCode() { |
final int prime = 31 ; |
int result = 1 ; |
result = prime * result + ((name == null ) ? 0 : name.hashCode()); |
result = prime * result + num; |
return result; |
} |
@Override |
public boolean equals(Object obj) //传过来的对象 { |
if ( this == obj) //此类和穿过来的是否相等 ==比较的是地址(引用类型)若为基本类型,比较大小 |
|
return true ; |
if (obj == null ) // 对象和空比较为false |
return false ; |
if (getClass() != obj.getClass()) 俩类不是同类,为 false |
return false ; |
Animal other = (Animal) obj; |
if (name == null ) { |
if (other.name != null ) |
return false ; |
} else if (!name.equals(other.name)) |
return false ; |
if (num != other.num) |
return false ; |
return true ; |
} |
* string 内容不可改 在新建string时,先查找内存空间,若存在则直接把地址赋给新建对象 |
* string str1= "123" ; |
* string str2= "123" ; str1==str2 是对的 虽然string是引用类型,但 "123" 在堆中只有一个 |