一,多态的概念
1,什么是多态
多态是同一个行为具有多个不同表现形式或形态的能力。
如:带宠物去看病 宠物可以是狗可以是猫 所有看病方法的形参使用猫和狗的父类 宠物,
2,为什么用多态
多态不仅能让程序设计更加易实现,也更容易维护和扩展, 使用多态的代码更容易理解和修改。
多态可以在不同的子父类中使用相同的代码,提高了代码的可复用性。
多态使得程序在运行时能够动态地选择相应的处理方法,从而增加程序的灵活性。
多态使得不同的对象能够相互替代,从而增加了程序的可扩展性和可维护性。
3,多态的作用
二,多态的使用
1,语法:
父类 父类的引用= new 子类();
父类的引用指向子类的实例。
编译看左边(子类需要重写父类的方法),运行看右边(运行子类重写后的方法)
注:如果想执行子类特有的方法,向下转型
2,实例
public class Dog extends Pet{//子类狗狗 继承 父类宠物
public void show(){
System.out.print("狗狗的名字是:"+getName());//重写方法
}
}
class Cat extends Pet{//子类猫猫 继承 父类宠物
public void show(){
System.out.print("猫猫的名字是:"+getName());
}
}
class Pet{//父类宠物
private String name;//私有化属性年龄
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show(){
}
}
class Test{
public static void main(String[] args) {
Pet p1=new Dog();//多态调用狗狗类
p1.setName("旺财");//调用父类方法赋值姓名属性
p1.show();//实行狗狗类的show()方法
Pet p2=new Cat();//多态调用猫猫类
p2.setName("咪咪");//调用父类方法赋值姓名属性
p2.show();//实行猫猫类的show()方法
}
}
三,向下转型
如果想执行子类特有的方法,需要向下转型
语法:
子类 子类的引用=(子类)需要向下转型的类的引用
注:向下转型前需要用instanceof判断 子类和需要向下转型的类的引用是否是同一个类
class Dog extends Pet{//子类狗狗 继承 父类宠物
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {//子类独有的方法
this.age = age;
}
public void show(){
System.out.print("狗狗的名字是:"+getName()+"年龄是:"+age);
}
}
class Pet{//父类宠物
private String name;//私有化属性年龄
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show(){
}
}
class Test{
public static void main(String[] args) {
Pet p1=new Dog();
p1.setName("旺财");
if(p1 instanceof Dog){//判断两个类是否是同一个类
Dog dog=(Dog)p1;//向下转型
dog.setAge(12);//转型后可以调用子类独有的方法
}
p1.show();
}
}