目录
1.多态的实现条件
三个条件:
①必须式继承关系
②子类必须要对父类中的方法进行重写
③向上转型:用父类类型的引用,指向子类的对象
2.向上转型
2.1三种转型方法
2.2.1直接赋值
父类A,子类B
A a=new B(参数);
java
//Animal.java
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+"吃吃吃");
}
}
//Dog.java
public class Dog extends Animal{
public Dog(String name, int age) {
super(name, age);
}
public void bark(){
System.out.println(name+"汪汪汪");
}
}
//test.java
public class test {
public static void main(String[] args) {
Animal animal=new Dog("xiaohuang",12);
}
}
2.2.2方法的传参
java
public class test {
public static void fun1(Animal animal){
animal.eat();
}
public static void main(String[] args) {
Dog dog = new Dog("xiaobai", 23);
fun1(dog);
2.2.3方法的返回值
java
public static Shape method() {
// 返回子类对象 → 自动向上转型
return new Circle();
}
2.2转型之后的运行规则
只能调用父类有的成员变量或者方法,如果子类中重写了父类中的方法,虽然调用的还是父类中的方法,但是实际上执行的是子类中的方法
举个例子:
java
//Animal.java
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+"吃吃吃");
}
}
//Dog.java
public class Dog extends Animal{
public Dog(String name, int age) {
super(name, age);
}
public void eat(){
System.out.println(name+"吃狗粮");
}
}
//test.java
public class test {
public static void main(String[] args) {
Animal animal=new Dog("xiaohuang",12);
animal.eat();
}
}
执行结果:

而不是xiaohuang吃吃吃
3.多态的使用
多态的使用,可以帮助你省掉大量的if、else语句
例如:
java
//Shape.java
public class Shape {
public void draw(){}
}
//Circle.java
public class Circle extends Shape {
@Override
public void draw() {
super.draw();
System.out.println("画一个⚪");
}
}
//Juxing.java
public class Juxing extends Shape{
@Override
public void draw() {
System.out.println("画一个□");
}
}
//Sanjiaio.java
public class Sanjiao extends Shape{
@Override
public void draw() {
System.out.println("画一个◁");
}
}
//test.java
public class test {
public static void main(String[] args) {
Shape shape1=new Circle();
Shape shape2=new Sanjiao();
Shape shape3 =new Juxing();
shape1.draw();
shape2.draw();
shape3.draw();
}
输出结果:
或者:
java
public class test {
public static void main(String[] args) {
Circle circle=new Circle();
Sanjiao sanjiao=new Sanjiao();
Juxing juxing=new Juxing();
Shape[] shapes={circle,circle, sanjiao,juxing};
for(Shape shape:shapes){
shape.draw();
}
}
输出结果:
