多态的概念和实现
多态:一个事物在不同状态下的多种状态
举例:
- 学生是人,教师是人,医生是人。 (人在不同职业下的不同状态)
- 汽态的水,液态的水,固态的水。 (水在不同状态下的不同状态)
实现多态的前提:
1、必须要有继承关系
2、需要有方法的重写 (不是必须要重写,但是重写可以体现子类的专属特征,因为子类可能会有自己的成员对象)
3、要有父类的引用指向子类对象
注意事项:
- 1、必须是继承关系的类,才可以写成父类的引用指向子类对象
eg.GuTaiWater extends Water
固态水 继承于 水
Water w1 = new GuTaiWater() 正确
Demo1 w2 = new GuTaiWater() 错误
- 2、左边的父类可以不必是子类对象的直接父类,也可以是父类的父类
eg.Water extends Power
GuTaiWater extends Water
Power1 p1 = new GuTaiWater() 正确
多态下,访问成员的特点
1、成员变量
- 编译的时候,看左边的父类是否有该变量的存在,若存在,编译不报错,运行的结果也是取父类中该变量的值 (编译看左,运行看左)
2、成员方法
- 编译的时候,看左边的父类是否有该方法的存在,若存在,编译不报错,运行的结果取决于子类中该方法的实现 (编译看左,运行看右)
3、静态的成员变量
- 编译的时候,看左边的父类是否有该变量的存在,若存在,编译不报错,运行的结果取决于父类中该变量的值 (编译看左,运行看左)
多态的好处
1、提供了程序的维护性(由继承保证)
2、提高了程序的扩展性(由多态保证)
- 举例: 编写一个animal类,成员变量有姓名、年龄 ,成员方法有吃、睡,定义一个工具类对每个动物调用吃和睡功能
class Animal{
String name;
int age;
public Animal(){
//无参构造方法,可以让下面的子类不需要定义构造方法
}
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
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 void eat(){
System.out.println("我饿了,我吃饭");
}
public void sleep(){
System.out.println("我困了,我睡觉");
}
}
class dog extends Animal{
@Override
public void eat() {
System.out.println("
标签:Java,子类,void,多态,抽象,父类,方法,public
From: https://www.cnblogs.com/lucky-lack0-0/p/18343311