1.多态的概念
不同的对象完成某个相同行为,产生出了不同的状态。(同一件事情,发生在不同的对象上,产生不同的结果)
2.实现多态的条件
- 必须在继承体系下
- 子类必须要对父类中方法进行重写
- 通过父类的引用调用重写方法
多态的体现:传递不同的对象,会调用对应类中的方法
3.重写(覆盖)
子类对父类非静态,非private、final修饰,非构造方法等的实现过程重写,子类能够根据需要实现父类方法。
重写规则:
- 方法名必须相同
- 参数列表必须相同(类型,个数,顺序)
- 返回值必须相同(可以不同,但必须具有父子关系)
注意事项:1.访问权限要大于等于父类被重写的方法的访问权限
private<默认权限<protected<public
2.可以使用@Override注解来显示定义(帮助效验)
4.向上/下转型
1.向上转型
小范围向大范围的的转换,父类引用子类对象
语法格式:
父类类型 对象名=new 子类类型()
缺点:不能调用子类特有的方法
2.向下转型
将父类引用还原为子类对象(实现调用子类特有的方法)
例:类bird中有fly()方法(子类特有的),Animal(父类)
Animal animal = new Bird()
Bird bird = (Bird)animal
bird.fiy()
public class Animal {
String name;
int age;
public Animal(String name, int age){
this.name = name;
this.age = age;
}
public void eat(){
System.out.println(name + "吃饭");
}
}
public class Cat extends Animal{
public Cat(String name, int age){
super(name, age);
}
@Override
public void eat(){
System.out.println(name+"吃鱼~~~");
}
}
public class Dog extends Animal {
public Dog(String name, int age){
super(name, age);
}
@Override
public void eat(){
System.out.println(name+"吃骨头~~~");
}
}
public class TestAnimal {
public static void eat(Animal a){
a.eat();
}
public static void main(String[] args) {
Cat cat = new Cat("元宝",2);
Dog dog = new Dog("小七", 1);
eat(cat);
eat(dog);
}
}
运行结果:
元宝吃鱼~~~
元宝正在睡觉
小七吃骨头~~~
小七正在睡觉
1130

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



