本系列博客汇总在这里:Java系列_汇总
目录
- 一、多态是什么
- 二、多态特点
- 三、什么是多态子类的实例可以赋给父类引用
一、多态是什么
- 多态就是行为具有表现多种功能的能力。
- 比如父类里的方法在子类中重写时,他们的方法体不一样就是多态(继承多态)。
二、多态特点
- 必须要有继承关系,在抽象类中可以定义多态的抽象方法,通过子类来继承这个抽象类然后复写抽象类中的方法已达到多态的效果。
- 多态子类的实例可以赋给父类引用。
- 示例代码
-
- 在父类里的方法也可以是抽象的,注意关键字 abstract 的写法和添加位置,如下,与上面略有所不同就是父类里的方法是抽象的,实现原理都是多态。
//父类
class Person
{
String name;
public void eating()
{
}
}
class Student1 extends Person
{
//实现了eating的第一种形态
public void eating()
{
System.out.println(name+"吃西瓜");
}
}
class Student2 extends Person
{
//实现了eating的第二种形态
public void eating()
{
System.out.println(name+"吃橘子");
}
}
class Welcome
{
public static void main(String[] args)
{
Student1 st0 = new Student1();
st0.name = "张三";
st0.eating();
Student2 st1 = new Student2();
st1.name = "李四";
st1.eating();
}
}
三、什么是多态子类的实例可以赋给父类引用
- 示例
- 子类的实例赋给了父类做引用,实际调用还是调用子类的,内部机制是有标识的,但是需要注意的是子类的实例赋给父类做引用,父类不能调用子类当中独有的方法。
abstract class Person
{
String name;
int age;
/**
*继承多态的抽象方法
*/
public abstract void eating();
}
class Student1 extends Person
{
//实现了eating的第一种形态
public void eating()
{
System.out.println("\t"+name+"吃西瓜");
}
}
class Student2 extends Person
{
//实现了eating的第二种形态
public void eating()
{
System.out.println("\t"+name+"吃橘子");
}
}
class Teacher
{
/**
*检查Student
*/
public void checkStudent(Person st)
{
System.out.println("开始");
st.eating();
System.out.println("结束");
}
}
class Welcome
{
public static void main(String[] args)
{
//子类的实例用父类的类型来接收
Person st1 = new Student1();
st1.name = "张三";
//子类的实例用父类的类型来接收
Person st2 = new Student2();
st2.name = "李四";
//创建老师对象检查学生
Teacher teacher = new Teacher();
System.out.println("-----------------------");
teacher.checkStudent(st1);
System.out.println("-----------------------");
teacher.checkStudent(st2);
}
}
如有错误,欢迎指正!