多态
多态其实就是一种思想。
多态有向上转型的三种表现形式:1.直接赋值,2.方法的传参。3.返回值的接收。
- 由子类/派生类----》转换为为基类/父类/超类的两种转型(向上转型和向下转型)。
- 那么咱们在这儿说一个可能会面试的问题:请描述重载和重写的区别?
- 重载:方法名相同,参数列表相同,返回值不做要求。
- 重写:方法名相同,参数列表相同(参数类型和个数都相同),返回值相同。
- 有一个注意事项:要重写的方法不能用private修饰。被final修饰的方法不能被重写。需要重写的方法访问修饰限定符,子类的方法修饰访问限定符一定要大于父类的修饰限定符。
- 下面给出一个向下转型的代码举例:
- class Animal{
public String name;
public Animal(String name){
this.name=name;
this.eat();
}
public void eat(){
System.out.println(“Animal::eat()”);
}
}
class Cat extends Animal{
public Cat(String name){
super(name);
}
public void eat(){
System.out.println(“Cat::eat()”);
}
}
class Bird extends Animal{
public Bird(String name){
super(name);
}
public void eat(){
System.out.println(“Bird::eat()”);
}
public void fly(){
System.out.println(“正在飞”);
}
}
public class TestDemo1 {
public static void main(String[] args) {
// Animal animal=new Cat(“mimi”);
//向下转型
Animal animal=new Bird(“八哥”);
Bird bird=(Bird)animal;
bird.fly();
animal.eat();
}
}
什么情况下会发生动态绑定(多态):1.父类的引用,引用子类的对象(向上转型),2.通过父类的引用,调用子类和父类重写的方法。3.可扩展能力强。
抽象类
1.抽象类不可以被实例化。
2.抽象类中可以有成员方法。
3.若一个普通类继承了抽象类,那么这个普通类,一定要重写抽象类当中的抽象方法。
4.抽象方法一定要被重写。
5.若一个类继承了抽象类,且不想重写抽象类的方法,那么这个类只能是抽象类,一旦有其他类继承了抽象类,那么一定要重写这个抽象方法。
6.抽象类的出现,其实也是更方便程序员检查代码。