方法重写
定义:
当子类继承父类方法,但是父类的方法功能无法满足子类的需求,那就需要在子类重新定义父类的方法,加入子类需要的内容,这种就是方法重写或方法的覆盖(overriding)
规则:
在继承的情况下,子类的方法满足:
1.方法名相同
2.参数列表相同
3.返回值类型相同,或者是父类返回值类型的子类
4.访问修饰符的权限不能小于父类方法
5.抛出的异常不能大于父类(严于)
父类的静态方法不能被重写为非静态方法;
父类的非静态方法也不能被重写为静态方法;
在子类中可以定义和父类一样的静态方法,在静态方法中不能使用super,可以通过父类的类名去调;
方法构造时,super可以不在首行,可以根据需求
静态方法直接用类名.方法名 不可使用this和super
方法重写对比方法重载:

instanceof 判断当前对象是什么类型
重写equal:
public boolean equals(Object obj) {
if (this==obj){
return true;
}
if (obj instanceof pet) {
pet p = (pet) obj;
//自定义比较规则;
//如果宠物的名称相同,则认为是同一个对象
if (this.name != null && this.name.equals(p.name)) { //从左向右执行,所以先写不为空
return true;
}
}
return false;
}
多态
同一种事物,由于条件不同,产生的结果也不同
多态:同一个引用类型,使用不同的实例而执行不同的操作呈现多种状态
父类的引用指向了子类的对象,可以调用子类重写父类的方法和父类的方法、属性。
可以直接调用,如:Pet dog = new Dog{………}; Person p = new Student();
向上转型:

向下转型:强制类型转换
例:
public class TestMaster {
public static void main(String[] args) {
Master m=new Master();
pet p=m.getPet("fish");
System.out.println(p);
//涉及类型转换的时候,如果有多种可能,最好用instanceof关键字进行类型判断
if (p instanceof Cat){
Cat c=(Cat)p;
c.playWithBall();
}
if (p instanceof Dog){
Dog d =(Dog)p;
d.toPlay();
}
if (p instanceof Penguin){
Penguin q=(Penguin)p;
q.toPlay();
}
if (p instanceof Fish){
Fish f=(Fish)p;
f.toPlay();
}
}
}
抽象类
abstract关键字修饰类
抽象类不能被实例化(不能创建对象)
抽象方法:
抽象方法必须在抽象类中
抽象方法没有结构体
子类继承抽象类的时候,必须实现父类的抽象方法,除非这个子类也是抽象类

1207

被折叠的 条评论
为什么被折叠?



