1.1多态的概念
多态的概念:多种形态,去完成某个行为,当不同的对象去完成时会产生出不同的状态。
1.2 多态实现条件
- 必须在继承体系下,发生向上转型
- 子类必须要对父类中方法进行重写(子类和父类有同名的覆盖/重写方法)
- 通过父类的引用调用重写的方法
完成以上三部分,就会发生动态绑定。动态绑定是多态的基础。
多态体现:在代码运行时,当传递不同类对象时,会调用对应类中的方法。
1.直接赋值
Animal animal=new Dog("yuanyuan",12);//父类引用引用子类对象
2.传参的时候,进行向上转型
public static void func1(Animal animal) {
}//子类对象赋值给父类对象的引用
public static void main(String[] args) {
Animal animal=new Dog("yuanyuan",12);
func1(dog)
}
3.返回值向上转型
public static Animal func2() {
Dog dog=new dog("yuanyaun",12);
return dog;
}
1.3重写要满足的条件
1.返回值,参数列表,方法名必须一样。
2.被重写的访问修饰限定符 子类要大于等于父类
排序:private <默认的< protected< public
4.被private/static/final修饰的方法不能被重写
5.构造方法不能被重写
public static Animal eat() {
System.out.println(this.name+"正在吃饭 ");
return null;
}//协变类型
public static Dog eat() {
System.out.println(this.name+"正在吃狗粮");
return null;
}
Object是所有类的父类。
2.抽象类
1.使用abstract修饰的类/方法叫做抽象类/方法。
2.抽象类是不可以进行实例化的。
shape shape=new Shape();//错误
3.抽象类可以和普通类一样定义成员变量和成员方法。
4.当一个普通的类,继承了这个抽象类,需要重写这个抽象类中的所有抽象方法。
5.抽象类的出现是为了继承。
6.abstract和final不能共存。
7.被private static 修饰,这个抽象方法也是不可以的。