多态:
代码执行过程中呈现的多种形式–编译时期 、运行时期
多态的优点:
1.统一参数类型(new Pet())–匿名对象
2.降低耦合度(高内聚、低耦合)
编译时多态—在编译时期绑定代码–体现形式–方法重载
运行时多态—在运行时期绑定代码–体现形式 --方法重写、向上造型
向上造型误区:
package cn.tedu.duotai;
public class DTDemo1 {
public static void main(String[] args) {
/* //养个宠物
Pet p;
//养的宠物就是狗
p=new Dog();*/
//左边声明类是父类。右边实际创建的是子类---向上造型
//方法的具体执行要看子类是否有重写方法,**子类独有的方法不能进行调用**
Pet p = new Dog();
p.sleep();//运行时期确定了对象,体现了多态
}
}
//定义一个代表宠物的类
class Pet{
public void eat(){
System.out.println("在吃东西...");
}
public void sleep(){
System.out.println("在睡觉...");
}
}
//定义一个狗类
class Dog extends Pet{
//重写eat方法
public void eat(){
System.out.println("在呼呼呼的吃...");
}
public void brak(){
System.out.println("在汪汪汪的叫....");
}
}
//定义一个代表猫的类
class Cat extends Pet{
//重写eat方法
public void eat(){
System.out.println("在呼呼的吃");
}
public void 磨爪子(){
System.out.println("在磨爪子....");
}
}
**向上造型:**
**可以调用那些方法看父类,方法的具体执行看子类**
> **重写原则(反证法):**
1. 子类方法访问权限修饰符要么和父类方法访问权限修饰符一致,要么大于父类的方法访问权限修饰符
class A{
public void m(){}
}
class Be extends A{
void m(){}---->报错不能进行重写,访问不了父类的方法
}
向上造型对象调用方法具体执行看子类是否有重写的方法,在真正执行的时候并不能够调用到该方法。
**重载:方法签名相同,参数列表不同(与返回值无关)
重写:同名同参同返回,前面的权限修饰符不能比父类的更封闭,抛出的异常不能更宽泛。**
重载:与修饰符无关(public private protected default),与是否有返回值无关,可以有返回值也可以没有返回值。只要方法签名相同(方法名和参数列表是相同的就可以)
## 匿名对象:m(new Pet());一般是当做参数进行传递
特点:只会执行一次,最好传递参数