多态的形式
多态是继封装、继承之后,面向对象的第三大特性。
多态是出现在继承或者实现关系中的。
多态体现的格式:
父类类型 变量名 = new 子类/实现类构造器;
变量名.方法名();
多态的前提:有继承关系,子类对象是可以赋值给父类类型的变量。例如Animal是一个动物类型,而Cat是一个猫类型。Cat继承了Animal,Cat对象也是Animal类型,自然可以赋值给父类类型的变量。
多态的使用场景
要注意的是:
-
当一个方法的形参是一个类,我们可以传递这个类所有的子类对象。
-
当一个方法的形参是一个接口,我们可以传递这个接口所有的实现类对象(后面会学)。
-
而且多态还可以根据传递的不同对象来调用不同类中的方法。
多态的定义和前提
多态: 是指同一行为,具有多个不同表现形式。
从上面案例可以看出,Cat和Dog都是动物,都是吃这一行为,但是出现的效果(表现形式)是不一样的。
前提【重点】
-
有继承或者实现关系
-
方法的重写【意义体现:不重写,无意义】
-
父类引用指向子类对象【格式体现】
父类类型:指子类对象继承的父类类型,或者实现的父接口类型。
package com.zhao.a01polymorphismdemo1;
public class Person {
//父类
private String name;
private int age;
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
//方法
public void show(){
System.out.println(name+" "+age);
}
}
package com.zhao.a01polymorphismdemo1;
public class Student extends Person{
@Override
public void show() {
System.out.println("学生的信息为:"+getName()+" "+getAge());
}
}
package com.zhao.a01polymorphismdemo1;
public class Adminstrator extends Person{
@Override
public void show() {
System.out.println("管理员的信息为:"+getName()+" "+getAge());
}
}
package com.zhao.a01polymorphismdemo1;
public class Teacher extends Person{
@Override
public void show() {
System.out.println("老师的信息为:"+getName()+" "+getAge());
}
}
package com.zhao.a01polymorphismdemo1;
public class Test {
public static void main(String[] args) {
Student s=new Student();
s.setAge(18);
s.setName("张三");
register(s);
Teacher t=new Teacher();
t.setAge(28);
t.setName("李四");
register(t);
Adminstrator a=new Adminstrator();
a.setAge(29);
a.setName("王五");
register(a);
}
//这个方法既能接收老师,又能接收学生,还能接收管理员
//只能把参数写成这三个类的父类
public static void register(Person p){
p.show();
}
}
标签:name,age,多态,void,JavaSE,父类,public,三大 From: https://www.cnblogs.com/javaHane/p/17185806.html