为什么做的网站搜不出来,百度高级搜索功能,网站备案查询姓名,上海小程序开发费用多态#xff1a;它允许不同类型的对象对同一方法进行不同的实现#xff0c; 具体来说#xff0c;多态性指的是#xff1a;通过父类的引用变量#xff0c;来引用子类的对象#xff0c;从而实现对不同对象的统一操作。
多态#xff0c;只适用于方法#xff0c;不适用于属…多态它允许不同类型的对象对同一方法进行不同的实现 具体来说多态性指的是通过父类的引用变量来引用子类的对象从而实现对不同对象的统一操作。
多态只适用于方法不适用于属性
多态实现的条件
1、继承关系存在继承关系的类之间才能使用多态性多态性通常通过一个父类用变量引用子类对象来实现
2、方法重写子类必须重写Override父类的方法 通过在子类中重新定义和实现父类的方法可以根据子类的特点行为改变这个方法的行为如猫和狗吃东西的独特行为。
3、父类引用指向子类对象使用父类的引用变量来引用子类对象 这样可以实现对不同类型的对象的统一操作而具体调用哪个子类的方法会在运行时多态决定 举个例子根据猫 和 狗叫的动作的不同而实现的多态 class Animal { // 父类Animalpublic void sound() {System.out.println(动物发出声音);}
}class Dog extends Animal { // Dog 继承 父类AnimalOverridepublic void sound() {System.out.println(狗发出汪汪声);}
}class Cat extends Animal { // Cat 继承 父类AnimalOverridepublic void sound() {System.out.println(猫发出喵喵声);}
}public class Main {public static void main(String[] args) {Animal animal1 new Dog(); // 父类引用指向子类对象Animal animal2 new Cat(); // 父类引用指向子类对象# 下面这两个方法调用就是多态性的应用虚拟方法调用解释如下/* 在多态的场景下调用方法时编译时认为方法是左边声明的父类的类型的方法(即被重写的方法)执行时实际执行的是子类中重写父类的那个方法简称编译看左边运行看右边*/animal1.sound(); // 输出狗发出汪汪声animal2.sound(); // 输出猫发出喵喵声}
}对上述代码的解释 在这个例子中 Animal类是父类Dog、Cat类是它的子类 通过将父类的引用变量分别指向子类对象实现了多态性 在运行时根据引用变量的实际类型来调用相应的子类方法从而输出不同的声音。 多态的弊端在多态的场景下我们创建了子类对象也加载了子类特有的属性和方法
但是由于声明为父类的引用 导致我们没有办法直接调用子类特有的属性和方法 例子 public class AnimalTest {public static void mian(String[] args) {AnimalTest test new AnimalTest()test.adopt(new Dog);// 如果没有多态的话像下面这一句代码我们想弄一个Fish的// 因为我们这里只有一个 public void adopt(Animal animal){...代码}// 那么就只能再多声明一个 public void adopt(Fish fish) { ...代码 } 的// 那如果想再要一个monkey的呢// 那就得再多声明一个 public void adopt(Monkey monkey) { ...代码 } 的// 多麻烦啊test.adopt(new Fish);}public void adopt(Animal animal){/* 这里声明的是Animal animal但是实际上new的是 new Dog因为上面是 test.adopt(new Dog);而这里的声明的是Animal animal所以实际上是Animal animal new Dog*/animal.eat()animal.dump()// 这个里面你只能调用 Animal类中声明过且被子类重写的方法// animal.watchDoor() 和 animal.catchMouse() 在这里是调用不到的}
}class Animal {public void eat()){System.out.println(动物进食)}public void dump()){System.out.println(动物跳)}
}class Dog {public void eat()){System.out.println(狗啃骨头)}public void dump()){System.out.println(狗急跳墙)}public void watchDoor()){ // 这个是 Dog 特有的方法System.out.println(狗看门)}
}class Cat {public void eat()){System.out.println(猫吃鱼)}public void dump()){System.out.println(猫跳)}public void catchMouse()){ // 这个是 Cat 特有的方法System.out.println(猫抓老鼠)}
}