1.多态:实例方法的动态绑定 动态联编后期绑定
好处:可以写出维护的通用性代码 能应对需求的不断变化
父类型
2.如何编写一个多态?
1.定义一个父类 (父类 接口 抽象类)
2.定义一个子类
(1)子类继承父类 重写父类的方法
(2)子类继承抽象类 重写抽象类的方法
(3)子类继承接口 实现接口的方法
3.定义一个测试类方法 方法参数一定要是父类型 运行的时候 传入子类的对象
//一份代码 多种形态 根据你传入的对象不同 对象的teach()方法
3.绑定:给定一个方法名 通过该方法名决定到底执行那块代码的过程
动态:绑定运行时候,决定到底执行哪块代码
4. 1.静态方法有多态吗?
没有 静态方法是静态绑定的 不管传那个对象 都是调用的父类型方法
2.private 修饰的方法有动态码?
没有 以为多态是建立在继承上的 private不能别继承
3.final修饰的方法有多态吗?
没有 因为final修饰的方法不能被重写
4.属性有多态吗/?
没有
多态代码:
public class Animal {
public void run(){
System.out.println("动物在跑");
}
}
import java.util.Scanner;
public class AnimalType {
public Animal test( String type){
Animal animal;
if(type.equals("dog")){
animal=new Dog();
}else if(type.equals("cat")){
animal=new Brid();
}else{
animal=new Brid();
}
return animal;
}
public class Brid extends Animal{
public void run(){
System.out.println("鸟在飞");
}
}
public class Dog extends Animal {
public void run(){
System.out.println("狗在跑");
}
}
import java.util.Scanner;
//多态的使用
public class Test {
public void test(Animal animal){
animal.run();
}
public static void main(String[] args) {
/*Animal animal=new Dog();
Test s1=new Test();
s1.test(animal);*/
String ch="y";
while(ch.equals("y")){
AnimalType a=new AnimalType();
System.out.println("输入你想要的动物类型");
Scanner scanner=new Scanner(System.in);
String type;
type=scanner.next();
Test s1=new Test();
s1.test(a.test(type));
System.out.println("是否输入y/n");
ch=scanner.next();
}
System.out.println("结束");
}